C++ 为什么我不能从模板函数调用模板类的模板方法
可能重复:C++ 为什么我不能从模板函数调用模板类的模板方法,c++,templates,C++,Templates,可能重复: 我有一个模板类和一个模板方法。 现在我有了另一个函数,有两个模板参数,用第一个模板参数创建类,用第二个模板参数调用函数。 考虑这个例子: template<class S> class A { public: template<class T> T f1() { return (T)0.0; } }; template<class T,class CT&
我有一个模板类和一个模板方法。 现在我有了另一个函数,有两个模板参数,用第一个模板参数创建类,用第二个模板参数调用函数。 考虑这个例子:
template<class S>
class A {
public:
template<class T>
T f1() {
return (T)0.0;
}
};
template<class T,class CT>
void function() {
A<T> a;
a.f1<CT>(); // gcc error in this line
}
在上面标记的行中。为什么这不起作用?我如何修复它?
谢谢
NathanA
是一种依赖类型(即,它取决于模板参数T
),因此您必须指定您引用的是模板成员:
a.template f1<CT>();
a.template f1();
您可以,但需要帮助编译器
由于a
具有依赖类型,编译器无法假定a.f1
引用的内容。它可以是一个类型,一个常数,一个函数。。。不管怎样
因为模板语法使用了
@ebo:ah谢谢,而Johannes的例子比我能想到的要邪恶得多:)
a.template f1<CT>();