Merhaba,
Benim için aralarındaki en büyük fark:
enum Meyva
{
Elma,
Armut
}
void MeyvaYazdır ( Meyva m)
{
std::cout << m == Elma ? "Elma" : "Armut" ;
}
Dediğimizde bu enum'u kullananlar direk şöyle erişebiliyor:
MeyvaYazdır( Elma );
Ama enum class olarak tanımlasaydık
MeyvaYazdır ( Meyva::Elma );
demek sorunda kalıcaktır. Büyük çaplardaki projelerde enum isimleri(elma, armut gibi) projeyi kirletebiliyorlar. O yüzdende isimler genel meyva_enum_elma, meyva_enum_armut gibi şeçiliyor. Ben meyva_enum_elma gibi isimlendirmeleri uzun buluyorum.
Ve enum classların en sevdiğim yönü "forward declare" edilebilmeleri. Eğer "forward declare" konusunu duymadıysan lütfen bir konu daha aç olurmu? Öyle bir durumda ben açtığın konuya cevap yazar ve "forward declare" konusunda örnekler yazarım.
Bir önemli olayı daha var bu enum class 'lar direk int'e cast olmuyorlar. Bu konuda enum lar direk int 'e dönüşebiliyor ve farketmeden sorunlara yol açabiliyorlar. Bu bence diğerlerine göre biraz daha önemsiz olduğundanörnek yazmayacağım belki başkası örnek vermek ister.
Bu arada D dilindeki enumlara bir bakmanı öneririm.
C, C++ dilinde enumlardan sonra hep MeyvaToString ve StringToEnum fonksiyonları filan yazılır. İşte dosyadan okuduğumuzda string'i enum türüne çevirmek için filan. Fakat güzel D mizde bu fonksiyonlara gerek kalmadan
enum Meyva : string
{
Elma = "Elma",
Armut = "Armut"
}
Gibi kısa bir dizilimle bu iş çözülebiliyor.
Sevgiler
Erdemdem
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]