2016-03-31 51 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{ ... }定期枚舉。