【问题标题】:C++ enum in foreach [duplicate]foreach中的C ++枚举[重复]
【发布时间】:2023-03-26 10:02:01
【问题描述】:

可能的重复:
Enumerate over an enum in C++
C++: Iterate through an enum

我有一个用于二十一点游戏的卡片类,其中包含以下枚举:

enum Rank { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King };
enum Suit { Clubs, Diamonds, Hearts, Spades };

当我创建卡片组时,我想编写如下代码:

// foreach Suit in Card::Suit
//   foreach Rank in Card::Rank
//     add new card(rank, suit) to deck

我相信 C++ 中没有 foreach。但是,如何遍历枚举?

谢谢, 斯宾塞

【问题讨论】:

标签: c++ foreach enums


【解决方案1】:

通常会在enum 中添加元素来促进这一点:

enum Rank {
    Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King,
    RankFirst = Ace, RankLast = King
};
enum Suit {
    Clubs, Diamonds, Hearts, Spades,
    SuitFirst = Clubs, SuitLast = Spades
};

然后您可以将循环编写为:

for (int r = RankFirst; r <= RankLast; ++r) {
    for (int s = SuitFirst; s <= SuitLast; ++s) {
        deck.add(Card((Rank)r, (Suit)s));
    }
}

【讨论】:

  • 我试过了,但出错了。我在这里工作: for (int suit = Card::Clubs; suit
  • 你说得对——这就是我在睡觉前回答 SO 问题的结果。我已经用现在可以编译的东西更新了代码。如果您按照“重复项”的链接,您会发现几个更奇特的解决方案,使您能够将 ++ 应用于 Enum 本身。它们提供了更多的类型安全性(无强制转换)。但是,这里提供的更简单的解决方案是我在大量生产 C++ 代码中看到的。
猜你喜欢
  • 2011-04-24
  • 1970-01-01
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多