boost::operators

boost 的 operators 提供了comparison operators、arithmetic operators、operators for iterators 操作。虽然使用 C++ 的标准容器和算法时只需要提供 operator< 操作就可以了。使用 boost 的 operators 可以保证你简单而正确的使用重载的操作符。

以后只要重载<和==就行了。

 
less_than_comparable 代表了如下的四个 operator
bool operator<(const T&,const T&);
bool operator>(const T&,const T&);
bool operator<=(const T&,const T&);
bool operator>=(const T&,const T&);
当从 from boost::less_than_comparable 派生时,派生类必须提供如下的等价函数 bool operator<(const T&, const T&),感觉通过提供成员函数 operator<(const T&)也可以起同样的作用。返回值可以是隐式转化为 bool 的类型。依照 C++ Standard 中 LessThanComparable 的要求实现 operator<,less_than_comparable 会实现余下的操作。
 
equality_comparable 提供如下操作
bool operator==(const T&,const T&); // 用户必须实现该操作
bool operator!=(const T&,const T&);
 
addable 显示如下操作
T operator+(const T&,const T&);
T operator+=(const T&); // 用户必须实现该操作
 
subtractable 提供了如下操作
T operator-(const T&,const T&);
T operator-=(const T&); // 用户必须实现该操作
 
orable 提供了如下操作
T operator|(const T&,const T&);
T operator|=(const T&,const T&); // 用户必须实现该操作
 
andable 提供了如下操作
T operator&(const T&,const T&);
T operator&=(const T&,const T&); // 用户必须实现该操作
 
incrementable 提供了如下操作
T& operator++(T&);  // 用户必须实现该操作
T operator++(T&,int);
 
decrementable 提供了如下操作
T& operator--(T&);  // 用户必须实现该操作
T operator--(T&,int);
 
equivalent 提供了如下操作
bool operator<(const T&,const T&);  // 用户必须实现该操作
bool operator==(const T&,const T&);
 
iterators 有两类操作 dereferenceable 和 indexable
dereferenceable 提供了如下操作
P operator->() const;
R operator*() const;  // 用户必须实现该操作
indexable 提供了如下操作
R operator[](D) const;
R operator+(const T&,D);  // 用户必须实现该操作
Composite Arithmetic Operators 在逻辑上组合了上述的多个操作。
 
最后一个技巧就是防止 Object Bloating 的 base class chaining。如
boost::less_than_comparable<thing,boost::equivalent<thing> >
一个有用的示例:
#include <iostream>
#include <boost/operators.hpp>
class some_class : boost::equivalent<some_class> {
  int value_;
public:
  some_class(int value) : value_(value) {}
  bool less_than(const some_class& other) const {
    return value_<other.value_;
  }
};
bool operator<(const some_class& lhs, const some_class& rhs) {
  return lhs.less_than(rhs);
}
int main() {
  some_class s1(12);
  some_class s2(11);
  if (s1==s2)
    std::cout << "s1==s2 ";
  else
    std::cout << "s1!=s2 ";
}
原文地址:https://www.cnblogs.com/hailong88/p/3293433.html