假设我要写一个 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; }; 