如何定义 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` 和 `std::any` 之间的区别