gpt4 book ai didi

C++ 模板自动类型提升

转载 作者:太空狗 更新时间:2023-10-29 23:51:59 24 4
gpt4 key购买 nike

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+函数根据参数的类型返回不同的类型。

例如,如果 aint b 是 int然后返回 Foo<int> , 如果其中一个或两个是 double然后返回 Foo<double> .

可以吗?

最佳答案

(C++11):在 dectype 中使用 declval 表达式:

#include <utility>

template <class X, class Y>
Foo<decltype(std::declval<X>() + std::declval<Y>())> operator+(...);

关于C++ 模板自动类型提升,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17892770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com