说我有:

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;
}

09-06 13:00