这是我试图编译的代码。我有一个.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 ++上引发编译错误。错误是&#34;没有用于初始化的匹配构造函数&#34;。 如果我替换行中的enumType&#34; somefunction&#34;用int或double,一切都很好,花花公子。非常感谢您的帮助!
答案 0 :(得分:-1)
从unsigned int继承枚举。将此枚举用于模板参数。
enum FooEnum : unsigned int
{ FOO1,FOO2};
template<typename EnumType>
void FooUser(EnumType t){}
int main(){
FooUser<FooEnum>(FooEnum::FOO2);
return 0;
}
不寻常的伎俩但有效!