一个类中的函数模板参数推导

时间:2014-02-14 11:45:36

标签: c++ templates template-deduction

我一直认为函数模板参数推导只能用于下面的纯函数而不能用于类。

template <class T1,class T2, class T3>
T foo(T2 a, T3 b)
{
   T o;
   //..do something
   return o;
}

今天我偶然把这个函数放在一个类中,它确实像下面一样工作。

class MyClass 
{
public:
   template <class T1,class T2, class T3>
   T foo(T2 a, T3 b)
   {
     T o;
     //..do something
     return o;
   }
}

我在Linux中使用g ++ 4.4。 这应该失败还是我误解了?

2 个答案:

答案 0 :(得分:4)

  

我一直认为函数模板参数推导可以   仅适用于下面的纯函数而不适用于类。

这是错的。自由函数和成员函数的推论没有区别。

答案 1 :(得分:1)

模板推理适用于功能方法

如果您有模板类,例如:

template <class T1, class T2>
class MyClass 
{
public:
   MyClass(T1 a, T2 b)
};

您不能使用类似

的类型推断类型
MyClass m(42, 53);           // Illegal
auto m = MyClass(42, 53);    // Illegal

你必须明确地给出类型:

MyClass<int, int> m(42, 53); // Legal 
相关问题