说我有:
template <typename T>
T resta(T a, T b) {
return(a-b);
}
这是一个模板,用于减去类型T的任何给定两种类型的参数。
并说我有一班人
class Person {
public:
int age;
Person(int ag) {
age = ag;
}
friend int operator-(Person a, Person b) {
return (a.age - b.age);
}
//friend resta(a, b);
};
我主要是:
int main(int argc, char *argv[]) {
int a = 5, b=3;
cout << "Ejemplo de plantilla es:\t" << resta(a, b) <<endl;
double d1 = 232.23, d2 = 231.4;
cout << "Ejemplo de plantilla es:\t" << resta(d1, d2) <<endl;
Person per1(40), per2(35);
cout << "Ejemplo de plantilla es:\t" << resta(per1, per2) <<endl; //IT FAILS HERE
}
如何使之成为可能,以便可以使用模板函数减去两个Person类型的对象,并获得两个对象的不同年龄(Of Person类型)?
谢谢。
最佳答案
在C ++ 11中
template<class T> auto resta(T a, T b) -> decltype(a-b)
{
return a-b;
}
在C ++ 14中
template <class T> auto resta(T a, T b)
{
return a - b;
}