[英]Why does boost::variant not provide operator !=
給定兩個相同的boost::variant
實例a
和b
,允許表達式( a == b )
。
但是( a != b )
似乎未定義。 為什么是這樣?
我認為它只是沒有添加到庫中。 Boost.Operators實際上並沒有幫助,因為任何一個變體都是從boost :: operator :: equality_comparable派生的。 David Pierre說你可以使用它,但你的反應也是正確的,ADL找不到新的運算符!=所以你需要一個using運算符。
我在boost-users郵件列表上問這個問題。
編輯來自@ AFoglia的評論:
七個月后,我正在研究Boost.Variant,我偶然發現了這個遺漏名單的更好解釋。
http://boost.org/Archives/boost/2006/06/105895.php
operator==
為當前變體中的實際類調用operator==
。 同樣,調用operator!=
也應該調用類的operator!=
。 (因為理論上,可以定義一個類,所以a!=b
與!(a==b)
。)這樣就會增加另一個要求,即變量中的類有一個operator!=
。 (關於你是否可以在郵件列表主題中做出這個假設存在爭議。)
當這個問題在boost郵件列表中制定時,這是作者自己答案的鏈接
總結一下,在作者看來,實現比較運算符(!=和<)會對用於創建變體類型的類型添加更多要求。
我不同意他的觀點,因為!=可以以與==相同的方式實現,而不必為構成變體的每種類型隱藏這些運算符的可能實現
因為它不需要。
Boost有一個運算符庫 ,它根據operator ==定義operator!=
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.