我试图了解在哪里使用template
,typename
但遇到了一个我无法解决的问题。我有一个模板函数f<T>
,它使用传递给它的类型(这将是一个类)来调用 template-member-function .f<T>
。我认为我typename
在函数体中的使用是正确的,但是,我不断收到以下错误:
source.cpp: In function
'void f()'
:
source.cpp:11:19: error: non-template'f'
used as template
source.cpp:11:19: note: use'typename T::C::template f'
表示它是一个模板
struct A {
struct C {
template <typename T> void f() {}
};
};
template <typename T> void f() {
typename T::C::f<int>();
}
int main() {
f<A>();
}
请注意它建议如何使用最后一个错误'typename T::C::template f'
。因此,我按照以下方式进行了更改:
// ...
typename T::C::template f<int>();
// ...
我按照它说的做了,但后来我收到了下一行错误:
错误:没有在中命名
'f'
的类模板'struct A::C'
我认为这个错误是不正确的,因为实际上有一个名为 in 的公共模板f
函数struct A::C
。我在这里做错了什么?