4
为什么会出现此错误,我该如何解决?此模板代码中的“预期表达式”错误
template<typename T>
struct foo {
template<size_t N>
void hello() {}
};
template<typename T>
struct bar {
void world() {
foo<T> f;
f.hello<0>(); //Error: Expected expression
}
};
好吧,似乎工作,但为什么这需要?为什么C++不像以前那样理解它?在这里只有一个hello成员模板函数... – 7cows 2013-05-12 15:13:04
@ 7cows:那么,在解析模板时(所以*之前*您实际上是用一个特定的'T'实例化模板),编译器不知道定义'foo'真的很像。它可能有一个名为'hello'的数据成员(比如说)'int'(在这种情况下'f.hello <0> ...'可能是'(f.hello < 0) > ...'),或者是一个被调用的成员函数'hello',具体取决于'T'。 –
2013-05-12 15:17:40
@ 7cows:是的,有一个'hello'模板,但'foo'可能专用于某些'T',并且专用的'foo'的定义可能看起来完全不同于主模板(例如,它可以有''int'类型的'hello'数据成员而不是'hello'成员函数模板 – 2013-05-12 15:18:59