Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用枚举实例化模板_C++_Templates_Enums_Constants - Fatal编程技术网

C++ 使用枚举实例化模板

C++ 使用枚举实例化模板,c++,templates,enums,constants,C++,Templates,Enums,Constants,为什么以下编译失败并出现错误:“arg”不能出现在常量表达式中 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) { MyCla

为什么以下编译失败并出现
错误:“arg”不能出现在常量表达式中

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;
}
class-Foo{
公众:
枚举髓鞘{BIRDY,NUMNUM};
typedef enum myenum myenum_t;
无效条(常量myenum_t arg);
}
模板类MyClass{};
void Foo::bar(const myenum\u t arg){
我的班级嗨;
}

枚举类型不是编译时常量吗?

您试图使用变量,而不仅仅是常量,编译时没有变量,请使用模板函数

template<myenum_t>
void bar();

template<Foo::myenum_t arg>
void Foo::bar()
{
   MyClass<arg> hey;
}
模板
空心钢筋();
样板
void Foo::bar()
{
我的班级嗨;
}

您试图使用变量,而不仅仅是常量,编译时没有变量,请使用模板函数

template<myenum_t>
void bar();

template<Foo::myenum_t arg>
void Foo::bar()
{
   MyClass<arg> hey;
}
模板
空心钢筋();
样板
void Foo::bar()
{
我的班级嗨;
}

枚举值是编译时常量,但您正在传递枚举类型的变量,该变量的值在程序执行之前不会确定

枚举值是编译时常量,但您正在传递枚举类型的变量,该变量的值在程序执行之前不会确定

arg
是一个运行时值。模板参数必须是编译时构造。
arg
是运行时值。模板参数必须是编译时构造。