說我有一個類,我重載操作==
這樣:C++:超載=當==重載
Class A {
...
public:
bool operator== (const A &rhs) const;
...
};
...
bool A::operator== (const A &rhs) const {
..
return isEqual;
}
我已經有運營商==
返回正確的布爾值。現在我想把它延伸到簡單的相反(!=
)。我想打電話給重載==
操作和返回相反,即自然
bool A::operator!= (const A &rhs) const {
return !(this == A);
}
這是可能的東西嗎?我知道this
不起作用,但它舉例說明了我想要的。我想只保留一個參數:rhs
。任何幫助將不勝感激,因爲我經過多次搜索嘗試後都無法提供答案。
的(使用'使用命名空間std :: rel_ops;')下跌,另一方面是定義所有的運營商''==現在也有一個隱含的'='即使有原筆者特地沒有!創建一個(如果他們沒有創建一個,他們可能有一個很好的理由(特別是因爲它很容易))。 –
優於'使用namespace',您可以添加使用'::性病:: rel_ops ::運算符=!;使用:: std :: rel_ops :: operator>; ...'來爲所定義類型的名稱空間中所需的運算符。這將使ADL能夠找到它,但它仍然存在Loki提到的問題:你不能通過類來控制,只能通過命名空間來控制。遺憾的是,標準沒有在名稱空間中添加標籤類型,因爲這會更簡單:class MyType::: std :: rel_ops :: tag {};'會將所有模板都帶入'MyType'不會干擾命名空間中的其他類型。 –
(使用的標籤類型,以使在一個命名空間模板運營商的選擇是由迪特馬爾庫爾建議的,儘管這是預C++ 11'rel_ops')。另一種(不使用'的std :: rel_ops'我有打過去被濫用CRTP:!'模板結構可比{朋友布爾運算符=(T常量&A,T常量和b){返回(一== b );}; friend bool operator>(T const&a,T const&b){return b {};/*在一個單獨的命名空間中再次提供op ==,op <* /',ADL將通過查找基類來找到它... –