c++ - 类型推导模板函数c++

标签 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 >();
}

我需要在函数调用后提供模板元素,因为自动类型推导对函数不起作用,只有返回类型取决于模板参数。这适用于测试。但是当我添加接下来的两行时,我得到以下编译器错误:

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

最佳答案

你需要使用:

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

要找到关于在调用 a.foo 时需要使用 template 的详细信息,请查看此 SO 答案:https://stackoverflow.com/a/613132/434551

关于c++ - 类型推导模板函数c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24473176/

相关文章:

c++ - 使用 cmake 强制构建 32 位或 64 位的选项

c++ - vector <int> a 、 vector <int> a[n] 和 vector <int> a(n) 之间有什么区别?

c++ - 模板偏特化问题

c++ - 嵌套模板的可能性

C++ 类排序

c++ - std::function 赋值应该忽略返回类型吗?

c++ - boost 进程间unordered_map编译

c++ - 简单参数包扩展 : expected ';'

c++ - 即使存在带有结束条件的重载,带有模板参数包的递归函数也会不断调用自身

c++ - 推断 operator+ 和其他运算符的(模板化)返回类型