类型推导模板函数c ++

时间:2014-06-29 04:30:50

标签: c++ templates

我必须遵循示例代码。在这段代码中,我有两个模板类,每个类都有一个模板函数。其中一个类有另一个类的对象,在模板函数中它调用另一个类的模板。

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>();

1 个答案:

答案 0 :(得分:1)

您需要使用:

template<typename V>V foo2(){
     return this->a.template foo<V>();
}

要在template的来电中找到您需要使用a.foo的原因的详细信息,请查看此SO答案:https://stackoverflow.com/a/613132/434551