c – 如何使用std :: rel_ops自动提供比较运算符?

前端之家收集整理的这篇文章主要介绍了c – 如何使用std :: rel_ops自动提供比较运算符?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
参见英文答案 > Idiomatic use of std::rel_ops4个
如何获取运算符>,> =,< =和!= from ==和<? 标准标题< utility>定义了一个命名空间std :: rel_ops,它根据operator ==和<来定义上述运算符,但我不知道如何使用它(使我的代码使用这些定义:
std::sort(v.begin(),v.end(),std::greater<MyType>);

我在哪里定义了非成员操作符:

bool operator < (const MyType & lhs,const MyType & rhs);
bool operator == (const MyType & lhs,const MyType & rhs);

如果我#include< utility>并使用namespace std :: rel_ops指定;编译器仍然抱怨二进制’>’ :找不到哪个运算符带有’MyType’类型的左手操作数.

解决方法

我使用 <boost/operators.hpp>标题
#include <boost/operators.hpp>

struct S : private boost::totally_ordered<S>
{
  bool operator<(const S&) const { return false; }
  bool operator==(const S&) const { return true; }
};

int main () {
  S s;
  s < s;
  s > s;
  s <= s;
  s >= s;
  s == s;
  s != s;
}

或者,如果您更喜欢非会员操作符:

#include <boost/operators.hpp>

struct S : private boost::totally_ordered<S>
{
};

bool operator<(const S&,const S&) { return false; }
bool operator==(const S&,const S&) { return true; }

int main () {
  S s;
  s < s;
  s > s;
  s <= s;
  s >= s;
  s == s;
  s != s;
}

猜你在找的C&C++相关文章