定义运算符 == 时,null 值返回"调用不明确"



我有自定义类Rational, Real和Complex。在Complex中,我重载运算符,它允许我比较一个Complex和一个Real,或者一个Complex和一个Rational。如果我可以定义一个从Rational到Complex的隐式转换,这将是很容易的,但是由于不值得深入研究的原因,我不能这样做。

因此,我有,其中,

==(Complex a, Real b)

==(Real a, Complex b)

显然当我尝试比较

c==null

得到的错误消息是调用是二义性的。我在一个相关的线程上看到我可以只定义==(Complex a, object b)的想法,我已经想到了,但是如果我想允许对称,我还需要==(object a, Complex b),在这种情况下,两个复合物之间的比较也将是模糊的。

现在,当我检查null时,我必须首先将Complex转换为对象。有什么更好的解决方案吗?(我希望有一个通用的解决方案,而不是一个解决方案,依赖于类之间的任何关系,如继承)

我认为你有像==(Complex c, Real C)==(Complex c, Complex C)这样的东西,当然编译器不会知道选择哪一个,所以当你比较一个null时,你必须像c1 == (Complex) null一样转换它。

为什么要使用第二个重载?您确定不能用第一个帐户付款吗?不存在"好看"的解决方案。

我可能应该发布,我不认为有一个解决方案,我只是决定放弃对称和去==(复杂的a,对象b)。感谢大家谁张贴!

最新更新