2013-06-30 51 views
1
enum class test : bool { yes=true, no=false }; 

template< bool ok > 
class A { 
}; 

int main(){ 
A<test::yes> a; 
} 

爲什麼編譯失敗? (g ++ 4.7)由於C++ 11枚舉是強類型的,所以我們應該能夠使用bool enum作爲模板類型的bool參數?使用類型爲bool的強枚舉(C++ 11)對於模板布爾參數失敗,爲什麼?

+1

你需要一個顯式的強類型的枚舉轉化爲自己的[基礎類型](http://en.cppreference.com/w/cpp/types/underlying_type) –

+5

這正是強類型意味着什麼:'test :: yes'的類型是'test',而不是'bool ',強類型枚舉的全部意義在於它們之間不存在隱式轉換。 – hvd

回答

7

強類型枚舉意味着您只能在相同的枚舉類中隱式地比較和賦值。解決的辦法是使用非強類型的枚舉例如:

enum test : bool 
{ 
    yes = true, 
    no = false 
}; 
bool x = test::yes; // ok 

或者由湯姆·克納彭的建議:明確投枚舉

enum class test : bool 
{ 
    yes = true, 
    no = false 
}; 
bool x = static_cast<bool>(test::yes); // ok 
+0

與原始版本相比,您的代碼不會顛倒'test :: yes'和'test :: no'的布爾含義嗎? – chelmuth

相關問題