C ++:枚举类型作为模板参数 - 全局范围

时间:2014-02-07 15:47:43

标签: c++ function templates enums global

我遇到这种情况:

template<typename myEnumType>
int foo(const myEnumType & shortest_paths_algorithm)
{
    ...
}

int main()
{
    myEnumType enum_type_istance;
    int a = foo(enum_type_istance)
}

如果我宣布

typedef enum {AAA, BBB} myEnumType;

在函数声明之前一切正常。然而,如果我在创建enum_type_istance变量之前编写上面的行,则得到错误

  

没有匹配函数来调用'foo(main():: myEnumType&amp;)'   候选者是:template int foo(const myEnumType&amp;)

为什么???我怎样才能在主内部进行类型定义? 谢谢!

1 个答案:

答案 0 :(得分:4)

您在C ++ 11之前使用的是C ++,它不允许在模板参数中使用“本地”类型。幸运的是,这个特性已经在C ++ 11中引入。作为you can see,它可以使用-std=c++11标记进行编译,而it fails则没有。{/ p>