Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类中的函数模板参数推断_C++_Templates_Template Argument Deduction - Fatal编程技术网

C++ 类中的函数模板参数推断

C++ 类中的函数模板参数推断,c++,templates,template-argument-deduction,C++,Templates,Template Argument Deduction,我一直认为函数模板参数推导只能用于下面这样的纯函数,而不能用于类 template <class T1,class T2, class T3> T foo(T2 a, T3 b) { T o; //..do something return o; } 模板 T-foo(T2 a、T3 b) { TO; //做点什么 返回o; } 今天我碰巧在一个类中加入了这样的函数,它的工作原理如下 class MyClass { public: template &l

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

template <class T1,class T2, class T3>
T foo(T2 a, T3 b)
{
   T o;
   //..do something
   return o;
}
模板
T-foo(T2 a、T3 b)
{
TO;
//做点什么
返回o;
}
今天我碰巧在一个类中加入了这样的函数,它的工作原理如下

class MyClass 
{
public:
   template <class T1,class T2, class T3>
   T foo(T2 a, T3 b)
   {
     T o;
     //..do something
     return o;
   }
}
class-MyClass
{
公众:
模板
T-foo(T2 a、T3 b)
{
TO;
//做点什么
返回o;
}
}
我在Linux中使用g++4.4。 这应该失败还是我误解了

我一直认为函数模板参数演绎可以 仅适用于以下纯函数,不适用于类

template <class T1,class T2, class T3>
T foo(T2 a, T3 b)
{
   T o;
   //..do something
   return o;
}
这是错误的。自由函数和成员函数中的演绎没有区别

我一直认为函数模板参数演绎可以 仅适用于以下纯函数,不适用于类

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

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

模板演绎适用于函数方法

如果您有模板类,则类似于:

template <class T1, class T2>
class MyClass 
{
public:
   MyClass(T1 a, T2 b)
};
您必须显式地给出类型:

MyClass<int, int> m(42, 53); // Legal 
MyClass m(42,53);//合法的

模板演绎适用于函数方法

如果您有模板类,则类似于:

template <class T1, class T2>
class MyClass 
{
public:
   MyClass(T1 a, T2 b)
};
您必须显式地给出类型:

MyClass<int, int> m(42, 53); // Legal 
MyClass m(42,53);//合法的

啊!很高兴知道这一点!谢谢!啊!!很高兴知道这一点!谢谢!对于一个类来说,操作符重载怎么样?我可以为这些创建一个模板版本吗?可以,有函数或方法。所以类型推断是有效的。非常感谢你的例子!对于一个类来说,操作符重载怎么样?我可以为这些创建一个模板版本吗?可以,有函数或方法。所以类型推断是有效的。非常感谢你的例子!