如何定义 boost::any 运算符 ==

Posted

技术标签:

【中文标题】如何定义 boost::any 运算符 ==【英文标题】:How to define boost::any operator == 【发布时间】:2017-12-09 04:02:03 【问题描述】:

我想在我的项目中为boost::any 定义operator ==。由于参数属于 boost 命名空间,因此依赖于参数的查找将在此处搜索它。所以,签名是:

namespace boost

    bool operator == (const boost::any &, const boost::any &);

但是,每当我包含一个比较枚举是否相等的 boost 库时,这都会产生模棱两可的重载错误,例如 thread/locks.hpp — 编译器认为没有理由更喜欢将枚举转换为 int 并改用内置比较将它们转换为boost::any 并使用我的。

我可以通过在与我的比较器相同的文件中包含任何此类库并定义自定义运算符来比较 boost 的枚举来解决这个问题。但是一定有更好的方法,对吧?

【问题讨论】:

【参考方案1】:
namespace boost 
  template<class T,
    typename std::enable_if<std::is_same<T, any>, bool>::type =true
  >
  bool operator == (const T& lhs, const T& rhs)
    return any_equal(lhs, rhs);
  

【讨论】:

这正是我想要的!谢谢! 请注意,为自定义添加打开 boost 命名空间是有问题的。 @sehe 是的;我会创建自己的扩展命名空间namespace myboost struct any: ::boost::any /* some glue code */ ;

以上是关于如何定义 boost::any 运算符 ==的主要内容,如果未能解决你的问题,请参考以下文章

如何将boost :: any打印到流中?

`boost::any` 和 `std::any` 之间的区别

是否可以使用 boost.any 作为 std::map 中的键(或类似的东西)?

使用boost :: is_any_of的多个拆分令牌

为啥 `boost::any` 比 `void*` 更好?

调用模板函数出错