我必须遵循示例代码。在这段代码中,我有两个模板类,每个类都有一个模板函数。其中一个类有另一个类的对象,在模板函数中它调用另一个类的模板。
template<typename T>
class A{
public:
A(T a): a(a){}
template< typename V> V foo(){
return this->a;
}
private:
T a;
};
template<typename T>
class B{
public:
B( A<T> a): a(a){}
template<typename V>V foo2(){
return this->a.foo<V>();
}
private:
A<T> a;
};
int
main()
{
A<int> a(5);
double aTest = a.foo<double>();
B<int> b(a);
double c = b.foo2< double >();
}
我需要在函数调用之后提供模板元素,因为自动类型推导不适用于函数,只有返回类型取决于模板参数。这适用于aTest。但是当我添加接下来的两行时,我得到以下编译器错误:
build/main.cpp: In member function 'V B<T>::foo2()':
build/main.cpp:32:23: error: expected primary-expression before '>' token
return this->a.foo<V>();
^
build/main.cpp:32:25: error: expected primary-expression before ')' token
return this->a.foo<V>();
答案 0 :(得分:1)
您需要使用:
template<typename V>V foo2(){
return this->a.template foo<V>();
}
要在template
的来电中找到您需要使用a.foo
的原因的详细信息,请查看此SO答案:https://stackoverflow.com/a/613132/434551