SORU
27 Ocak 2009, Salı


numaralandırma türleri için Ad - en iyi uygulamalar

Sık sık bir araya birkaç numaralandırılmış türleri ihtiyacı var. Bazen, tek bir isim bir çatışma vardır. İki çözüm bu geldi aklıma: ad ya da 'büyük' bir öğe adlarını Sırala. bir kullanın Hala, ad çözüm iki olası uygulamaları vardır: iç içe numaralama, ya da tam şişmiş bir ad ile boş bir sınıf.

Her üç yaklaşımın artılarını ve eksilerini arıyorum.

Örnek:

// oft seen hand-crafted name clash solution
enum eColors { cRed, cColorBlue, cGreen, cYellow, cColorsEnd };
enum eFeelings { cAngry, cFeelingBlue, cHappy, cFeelingsEnd };
void setPenColor( const eColors c ) {
    switch (c) {
        default: assert(false);
        break; case cRed: //...
        break; case cColorBlue: //...
        //...
    }
 }


// (ab)using a class as a namespace
class Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
class Feelings { enum e { cAngry, cBlue, cHappy, cEnd }; };
void setPenColor( const Colors::e c ) {
    switch (c) {
        default: assert(false);
        break; case Colors::cRed: //...
        break; case Colors::cBlue: //...
        //...
    }
 }


 // a real namespace?
 namespace Colors { enum e { cRed, cBlue, cGreen, cYellow, cEnd }; };
 namespace Feelings { enum e { cAngry, cBlue, cHappy, cEnd }; };
 void setPenColor( const Colors::e c ) {
    switch (c) {
        default: assert(false);
        break; case Colors::cRed: //...
        break; case Colors::cBlue: //...
        //...
    }
  }

CEVAP
27 Ocak 2009, Salı


yararistediğiniz zaman using bildirimleri kullanabileceğiniz namespace (class).

sorunad başka bir yerde kod genişletilebilir namespace kullanarak. Büyük bir proje, iki farklı çeteleler hem eFeelings denir sanmıyorum garanti olmaz

Görünümlü basit-kodu, muhtemelen içeriğini ortak olmak istiyorum struct, bir kullanıyorum.

Eğer bu uygulamalar herhangi birini yapıyorsan, ilerisini ve muhtemelen bu daha ince eleyip sık dokumak gerek yok.

Ek

Eğer C 11 veya sonraki bir sürümünü kullanıyorsanız, enum class örtülü olarak kapsam numaralama adı içinde numaralandırma değerleri.

enum class ile örtülü dönüşüm ve tamsayı türleri için karşılaştırma kaybedersiniz, ama uygulamada bu bayrak belirsiz bir yardım veya kod hatalı olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS

    ASUS

    22 EKİM 2005
  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • Phandroid

    Phandroid

    26 Ocak 2009