2016-11-11 75 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

啊,当然。谢谢。 –