假设我要写一个 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;
};
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.