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

时间:2017-12-09 04:02:04

标签: c++ c++11 boost

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

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

然而,每当我包含一个比较枚举相等的提升库时,这会产生不明确的重载错误,例如thread/locks.hpp - 编译器认为没有理由倾向于将枚举转换为int并使用内置的 - 比较而不是将它们转换为boost::any并使用我的。{/ p>

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

1 个答案:

答案 0 :(得分: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);
  }
}