2016-11-11 29 views
5

kodundan kaçının. Enum değerini kullandığım her defasında belirli bir enum niteleyiciden bahsetmekten kaçınmak güzel olurdu - çünkü bu yeni bir kod ve çok sayıda yeniden kodlanmış. C++14 veya 17'de mümkün hale gelecektir C++11 yılındaSabit kodlama enum tip

enum abc { a,b,c }; 
// some long code of events which returns the enum's value 
auto e = []()->abc{return abc::b;}(); 
if (e == std::declval(e)::a) { ... 

Bu mümkün değilse: Bu amaçla

mümkün bu sözde kod son satırında ruhuna şeydir?

+1

enum adını kullanmak zorunda değilsiniz. Sadece 'if (e == a) ' –

+0

Eksik' sınıfı 'hata olması için çıktı olarak kullanabilirsiniz. –

cevap

8

Sen yakınsın, decltype kullanabilirsiniz: bir `enum class` olmadıkça

if (e == decltype(e)::a) { 
    ... 
+0

Burada neyi özlüyorum, neden sadece 'a' çalışmıyor? Bu durumda –

+0

@CaptainGiraffe, olacak. Ancak, enum bir ad alanında bildirilirse veya sınıf üyesi veya enum sınıfıysa, kırılır. – krzaq

+0

Ah, tabi ki. Teşekkürler. –