我一直认为函数模板参数推导只能用于下面的纯函数而不能用于类。
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。 这应该失败还是我误解了?
答案 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