我正在使用Visual Studio 2013,并且在函数返回模板外部类中的嵌套模板类时出现了一些问题。我做了一个最小的例子,真正的例子涉及更多的代码:
template<typename R, typename... S>
class Foo
{
public:
template<typename T>
class Bar
{
};
};
template<typename T, typename R, typename... S>
typename Foo<R, S...>::Bar<T> fooBar() { // <--- LINE 33
}
这会产生一整套错误(主要来自后续代码):
它也会影响后续代码,之后所有行都会出现大量的语法错误。
我没有看到某些东西或者这可能是Visual Studio的问题吗?
答案 0 :(得分:4)
问题/解决方案
在此上下文中,您需要使用关键字template
来告诉编译器Bar
确实是一个模板,如下面的代码段所示:
template<typename T, typename R, typename... S>
typename Foo<R, S...>::template Bar<T> fooBar() { // <--- LINE 33
...
}
但是为什么?
每当模板名称是依赖模板名称时,我们都需要使用template
关键字,如果没有它,编译器将会处理Bar
在Foo<R, S...>::Bar
中作为非模板,这是没有意义的;它错了。
进一步阅读: