2010-05-31 4 views
7

Olası çoğaltmaları:
Enumerate over an enum in C++
C++: Iterate through an enumC++ enum

aşağıdaki çeteleler ile blackjack oyunu için bir kart sınıf var ettik:

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

Güverteyi oluşturduğumda c yazmak istiyorum bunun gibi:

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

C++ 'da hiçbir foreach bulunmadığına inanıyorum. Ancak, bir enum'u nasıl geçebilirim? enum öğeler eklemek için ortaktır

+0

bu ilgili soruya bakın:

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 }; 

Sonra olarak döngüler yazabilirsiniz : http://stackoverflow.com/questions/1390703/enumerate-over-an-enum-in-c – Alan

+2

@Alan Bana bir tam kopya gibi görünüyor –

cevap

19

sayesinde Spencer Bunu kolaylaştırmak için:

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

Bunu denedim ve bir hata aldım. Çalıştığım var Burada neyi: (; takım elbise <= Kart :: Maça; takım elbise ++ int takım elbise = Kart :: Clubs) \t \t (int sıralaması = Kart :: Ace için; için sıralaması <= Kart :: Kral; rank ++) \t \t \t cards.push (Kart (Card :: Rank (rank), Card :: Suit (suit))); – Spencer

+0

Haklısınız - bu, yatmadan önce SO sorularına cevap vermek için aldığım şey. Kodu şimdi derleyen bir şeyle güncelledim. "Çoğaltmalar" bağlantılarını izlerseniz, Enum'un kendisine ++ uygulayabilmeniz için daha fazla egzotik çözüm bulabilirsiniz. Daha fazla güvenlik sağlarlar (döküm yok). Bununla birlikte, burada sunulan daha basit çözüm, tonlarca üretim C++ kodunda gördüm. – MtnViewMark