说我有:
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 Type Person?)
谢谢。
答案 0 :(得分:2)
在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;
}
答案 1 :(得分:1)
您无法获得template
函数resta()
。你做过:
friend int operator-(Person a, Person b);
你能得到:
Person a; //...
Person b; //...
int diff = a - b;
这可能是你想要的。
答案 2 :(得分:0)
Class Person需要更改为
class Person {
public:
int age;
Person(int ag) {
age = ag;
}
friend int resta(Person a, Person b);
int operator-(Person b) {
int result = resta(this->age, b.age);
return result;
}
//friend resta(a, b);
};
并在main中调用重载的运算符...
cout << "Ejemplo de plantilla es:\t" << (per1 - per2) <<endl;