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

3

我有一个这样的情况:

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&)”匹配的函数 候选项为:模板int foo(const myEnumType&)

为什么???我如何在主函数内定义类型? 谢谢!


2
使用本地类型作为模板类型参数是C++11的一个特性。请确保您的编译器支持它并且您正在使用C++11模式(如果可能的话)。代码可运行,实时示例 - dyp
1
(顺便说一句,我不知道为什么你不能在C++中只使用“enum myEnumType {AAA,BBB};”)请返回翻译后的文本。 - dyp
但是如果我写成'typedef int myEnumType;',那么它也可以在main()函数内部工作,为什么呢?'int'和'enum'之间有什么区别? - user1403546
int从不是本地类型。本地类型是在函数内定义的类型。typedef非常透明,因此它(似乎)不关心您使用typedef还是所引用的类型。 - dyp
1个回答

4

您正在使用C++11之前的版本,该版本不允许在模板参数中使用“本地”类型。幸运的是,这个特性已经在C++11中引入。正如您所看到的,使用-std=c++11标志编译可以正常通过,而没有此标志则会失败


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接