假设我要写一个 Complex 类,底层存储类别写成模版参数。我可以实现Complex<int> + Complex<int>并得到正确返回,下一步想支持Complex<int> + Complex<double>或者任何可以相加的数值类型。这时候我需要确认int和double哪个占用更多空间,来确定operator+(...)的返回类型。
这时候应该怎么做到?我猜测应该是和下面的代码类似,但是用 C 久了不太会用decltype,望大神指点一二。谢谢
代码如下:
template <typename T = int>
class Complex{
public:
Complex()
: real(0), imag(0){}
Complex(T r, T i)
: real(r), imag(i){}
template <typename U>
Complex operator+(const Complex<U>& rhs ){
Complex<decltype(T+U)> ret(real + rhs.real, imag + rhs.imag);
return ret;
}
friend std::ostream& operator<<(std::ostream& out, const Complex& c){
out << "(" << c.real << ", " << c.imag << ")" << std::endl;
return out;
}
private:
T real;
T imag;
};