避免硬编码枚举类型

Vla*_*nko 5 c++ c++11

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) { ...
Run Code Online (Sandbox Code Playgroud)

如果不可能,C++11它会成为C++14或17?

krz*_*zaq 8

你很近,你可以使用decltype:

if (e == decltype(e)::a) {
    ...
Run Code Online (Sandbox Code Playgroud)

  • 真棒!枚举定义中缺少类也是一个错误,我很高兴我问了这个问题. (2认同)