2016-03-31 53 views
0

当我打开enum class我必须在每种情况下重新编写enum class。由于constexpr以外的原因,这个错误让我很难想象我还有什么意思。是否有通知编译器,如果有匹配,块内的所有内容应该被解析为我选择的enum class切换枚举类时删除重复

请考虑下面的示例,其中包含一个编译代码片段,以及comparisson一个非编译代码片段(注释掉),我想写。

#include <iostream> 

enum class State : std::uint8_t; 
void writeline(const char * msg); 
void Compiles(State some); 

enum class State : std::uint8_t 
{ 
    zero = 0, 
    one = 1 
}; 

int main() 
{ 
    Compiles(State::zero); 
    return 0; 
} 

void Compiles(State some) 
{ 
    switch (some) 
    { 
    case State::zero: //State:: 
     writeline("0"); 
     break; 
    case State::one: //State:: 
     writeline("1"); 
     break; 
    default: 
     writeline("d"); 
     break; 
    } 
} 


//void WhatIWant(State some) 
//{ 
// using State{ //this makes no sense to the compiler but it expresses what I want to write 
//  switch (some) 
//  { 
//  case zero: //I want the compiler to figure out State::zero 
//   writeline("0"); 
//   break; 
//  case one: //I want the compiler to figure out State::one 
//   writeline("1"); 
//   break; 
//  default: 
//   writeline("d"); 
//   break; 
//  } 
// } 
//} 

void writeline(const char * msg) 
{ 
    std::cout << msg << std::endl; 
} 

有没有使用switch语句,并让编译器弄不清enum class,给人一种暗示,一旦后可能的方法吗?

+0

我不认为你想要什么是可能的,除非你使用旧式(非类)枚举。枚举类的优点之一是可以通过为每个枚举值使用完全限定名来避免命名冲突。 –

+0

最近有人写了一个关于这方面的建议。它被拒绝了。 –

+0

@ T.C。我在哪里可以找到该建议。 – Johannes

回答

1

enum class专门设计的方式让你必须适用State::每次。

如果您不想在每个语句中使用State::前缀,只需使用C++ 98中的旧样式枚举即可。

注:与C++ 11,你仍然可以使用像水木清华:enum MyEnym: std::uint8_t{ ... }定期枚举。