将枚举作为模板参数传递

时间:2014-07-21 12:45:07

标签: c++ templates

为什么以下模板功能

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;

1 个答案:

答案 0 :(得分:4)

这可能意味着您的编译器已过期。

在C ++ 11之前,没有链接的类型(例如在函数中声明的类型)不能用作模板参数。现在已经删除了这个相当奇怪的限制。

如果您将enum声明移动到命名空间作用域(给它外部链接),或使用现代编译器,您的示例应该编译:http://ideone.com/QZQjHI