2016-11-11 76 views
5

c++11代碼中,每次使用枚舉值時都應該避免提及特定的枚舉限定符 - 因爲它是一個新代碼,並且它被重構了很多。避免硬編碼枚舉類型

爲了這個目的是否有可能在東西這個僞代碼的最後一行的精神:

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) { ... 

如果無法在C++11將它變成可能在C++14或17?

+1

您不必使用枚舉的名稱,除非它是一個'枚舉class'。你可以簡單地使用'if(e == a)' –

+0

缺少'class'原來是bug。 –

回答

8

你靠近,你可以使用decltype

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

我在這裏錯過了什麼,爲什麼不只是簡單的'a'工作? –

+0

@CaptainGiraffe在這種情況下,它會。但是,如果枚舉是在一個名稱空間中聲明的,或者是一個類成員或是一個枚舉類,它將會中斷。 – krzaq

+0

啊,當然。謝謝。 –