[英]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.