簡體   English   中英

使用枚舉實例化模板

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM