[英]Instantiate template using enum
為什么以下編譯失敗並error: 'arg' cannot appear in a constant-expression
?
class Foo {
public:
enum myenum { BIRDY, NUMNUM };
typedef enum myenum myenum_t;
void bar(const myenum_t arg);
}
template<Foo::myenum_t> class MyClass {};
void Foo::bar(const myenum_t arg) {
MyClass<arg> hey;
}
枚舉類型不是編譯時常量嗎?
您正在嘗試使用變量,而不僅是常量,在編譯時沒有變量,請使用模板函數。
template<myenum_t>
void bar();
template<Foo::myenum_t arg>
void Foo::bar()
{
MyClass<arg> hey;
}
枚舉值是編譯時常量,但是您傳遞的是枚舉類型的變量,其值要等到程序執行后才能確定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.