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
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.
En iyi / web hizmeti API dinlenebilmek...
Nasıl ya iPhone 5 ekran çözünürlüğü iç...
Android SQLite için en iyi uygulamalar...
Nasıl app store üzerinde uygulamalar i...
Raylar için bir cron iş: en iyi uygula...