我一直缺少一些重要的功能,std::complex比如能够添加一个std::complex<float>或一个std::complex<double>或类似的操作1+c,即在int和之间std::complex.我的想法是派生一个新类my::complex,std::complex从中继承已经实现的所有内容并添加其他内容.
为了使该代码使用功能兼容std::complex,我添加自动转换到和从std::complex(并且还之间自动转换my::complex<float>和my::complex<double>).
现在像
my::complex<float> c1,c2,c3;
c1 = c2 + c3;
Run Code Online (Sandbox Code Playgroud)
即使我没有实现operator+自己,因为c2并且c3被强制转换std::complex,添加并且结果被转换为my::complex.我假设编译器可以优化任何实际的复制.
但是,以下不起作用:
c1 = 2*(c2+c3)
Run Code Online (Sandbox Code Playgroud)
因为std::complex不能乘以一个整数(相同的问题,如果我乘以一个double并有complex<float>s).
我想:"好吧,看来我必须添加operator+的所有后",但如果我这样做,我得到的use of overloaded operator '+' is ambiguous,因为编译器之间std::complex和my::complex含蓄.
有没有更好的方法来实现我想要或做的事情我需要完全重新实现所有内容std::complex并抛弃继承?