如何使用模板函数减去两个对象?

时间:2015-10-24 03:16:49

标签: c++ templates operator-overloading

说我有:

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?)

谢谢。

3 个答案:

答案 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;