0

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

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。这应该失败还是我误解了?

4

2 回答 2

4

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

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

于 2014-02-14T11:47:05.957 回答
1

模板推导适用于functionmethod

如果您有模板类,例如:

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 
于 2014-02-14T12:07:15.237 回答