zoukankan      html  css  js  c++  java
  • 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 ";
    }
  • 相关阅读:
    统计学六:逻辑回归
    数据分析五:因子分析
    统计学四:聚类分析
    统计学三:线性回归
    统计学二:假设检验与参数估计
    统计学一:描述统计
    数据分析十:高价值用户识别
    数据分析九:互联网征信中的信用评分模型(用户APP使用行为分析)
    数据分析八:互联网征信中的信用评分模型(刷卡行为分析)
    数据分析七:数据治理
  • 原文地址:https://www.cnblogs.com/hailong88/p/3293433.html
Copyright © 2011-2022 走看看