2013-05-17 72 views
1

我有自定義類Rational,Real和Complex。在Complex中,我重載操作符,它允許我比較Complex和Real,Complex或Rational。如果我可以定義一個Rational對一個複雜的隱式轉換,這很容易,但是由於不值得進入的原因,我不能。定義運算符==時,null值返回「調用不明確」

所以我有,除其他外,

==(Complex a, Real b)

==(Real a, Complex b)

顯然,當我嘗試比較

c==null

我收到該調用不明確的錯誤消息。我在一個相關的線程上看到了一個想法,我可以定義==(Complex a, object b)我曾經想到過,但如果我想允許對稱性,我還需要==(object a, Complex b),在這種情況下,兩個複合體之間的比較也是不明確的。

現在,當我檢查爲空時,我必須首先將複雜對象轉換爲對象。什麼是更好的解決方案? (我希望得到一個通用的解決方案,而不是依賴於類之間的任何關係(例如繼承)的解決方案。)

+0

讓我看看你的'class declaration'代碼plz – Rahul

+0

Rahul,我真的在尋找一個獨立於類的細節。 – user2197148

回答

0

我應該發佈,我不認爲有一個解決方案,我只是決定放棄對稱和去==(複雜的a,對象b)。感謝所有發佈的人!

0

爲什麼要使用第二個重載?你確定你的支票不能使用第一張嗎?沒有「好看」的解決方案,你正在尋找。

+0

它不符合對稱的美學願望,所以我可以比較'myReal == myComplex'或'myComplex == myReal'。顯然我可以犧牲對稱性;我想知道是否有一個很好的解決方案,而不必這樣做。 – user2197148

0

我認爲你有類似於==(Complex c, Real C)==(Complex c, Complex C)的東西,當然編譯器不會知道選擇哪一個,所以當你比較一個空值時,你必須將其轉換爲c1 == (Complex) null

+0

也許你沒有閱讀我的文章的其餘部分?我一直不得不以這種方式投射,而且我正在尋找更清潔的解決方案。 – user2197148