使用枚举作为模板参数C++

Using enum as template parameter C++

本文关键字:参数 C++ 枚举      更新时间:2023-10-16

这是我试图编译的代码。我有一个.cpp文件,我在其中执行以下操作:

typedef enum enumtags {
    ONE,
    TWO
} enumType;
template <class T> 
class example {
  public:
    example(int key, T value):
        key_(key),
        value_(value) {}
  public:
    int key_;
    T value_;
};
//Explicit instantiation since I have the template in a cpp file
template class example<enumType>;
//Now a template function in the same cpp file
template<typename T>
void examplefunc(int key, T value) {
     somefunction(example<enumType>(key, value));
}
//instantiation of the function for the types i want
template void examplefunc<enumType>(int key, enumType value);
template void examplefunc<int>(int key, int value);

这在clang++上引发编译错误。错误为"没有用于初始化的匹配构造函数"。如果我用int或double替换"somefunction"行中的enumType,那么一切都很好。非常感谢您的帮助!

从无符号int继承枚举。将此枚举用作模板参数。

enum FooEnum : unsigned int
{ FOO1,FOO2};
template<typename EnumType> 
void FooUser(EnumType t){}
int main(){ 
FooUser<FooEnum>(FooEnum::FOO2); 
return 0;
}

不寻常的把戏,但工作!