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
이고 하나 또는 둘 다이다 double
다음 Foo<double>
을 리턴하는 경우, b는, 다음 Foo<int>
int
을 반환 경우.
할 수 있습니까?
아래의 의견에 대 한 응답에서, 나는 태그 C++ 03에 추가 : 다음은 자신의 규칙을 부여 할 경우 방법입니다. 당신이 무언가의 현재가 아닌 버전을 추적 할 때 당신은 당신의 질문에 그 것을 기술해야합니다. –