gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:03:14 75 4
gpt4 key购买 nike

这是我要编译的代码。我有一个 .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++ 上引发编译错误。错误是“没有匹配的初始化构造函数”。如果我将“somefunction”行中的 enumType 替换为 int 或 double,一切都很好而且花花公子。非常感谢您的帮助!

最佳答案

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

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

不寻常的技巧但有效!

关于c++ - 使用枚举作为模板参数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26171431/

75 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com