簡體   English   中英

為什么boost :: variant不提供運算符!=

[英]Why does boost::variant not provide operator !=

給定兩個相同的boost::variant實例ab ,允許表達式( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM