使用枚举实例化模板
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;
}
枚举值是编译时常量,但您传递的是枚举类型的变量,该变量的值直到程序执行才确定。
为什么下面的编译会失败 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;
}
枚举值是编译时常量,但您传递的是枚举类型的变量,该变量的值直到程序执行才确定。