template <class T>
class Foo {
public:
T val;
Foo(T _v): val(_v){}
friend ostream& operator<< (ostream& out, const Foo& A) {
out << A.val;
return out;
}
};
template <class X, class Y> Foo<???> operator+(const Foo<X>& A, const Foo<Y> & B) {
if (sizeof(X) > sizeof (Y))
return Foo<X>(A.val + B.val);
else
return Foo<Y>(A.val + B.val);
}
int main() {
Foo<double> a(1.5);
Foo<int> b(2);
cout << a << endl;
cout << b << endl;
cout << a+b << endl;
}
Моя цель состоит в том, чтобы функция operator+
возвращала другой тип, основанный на типах аргументов.C++ шаблон автоматического продвижения по типу
Например, если a
является int
и Ь int
затем вернуть Foo<int>
, если один или оба из них являются double
затем возвращаются Foo<double>
.
Это можно сделать?
В ответ на комментарии ниже, я добавил тег C++ 03. Когда вы отслеживаете текущую версию чего-то, вы должны указать это в своих вопросах. –