为什么以下模板功能
template<typename T>
bool isEqual(const T &v0, const T &v1)
{
return v0 == v1;
}
枚举v1和v2时,是否编译?
我怎样才能编写一个模板函数,用于将变量与枚举进行比较:isEqual(color, RED)
?
template<typename T>
bool isEqual(const T &v0, const T &v1)
{
return v0 == v1;
}
int main()
{
enum Enum
{
E1,
E2,
E3
} v1, v2;
v1 = E1;
v2 = E1;
isEqual(v1, v2);
}
TestProject / main.cpp:在函数&#39; int main()&#39;: TestProject / main.cpp:31:错误:没有匹配函数来调用&#39; isEqual(main():: Enum&amp;,main():: Enum&amp;)&#39;
答案 0 :(得分:4)
这可能意味着您的编译器已过期。
在C ++ 11之前,没有链接的类型(例如在函数中声明的类型)不能用作模板参数。现在已经删除了这个相当奇怪的限制。
如果您将enum
声明移动到命名空间作用域(给它外部链接),或使用现代编译器,您的示例应该编译:http://ideone.com/QZQjHI