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 ";
    }
  • 相关阅读:
    LIST组件使用总结
    openlayers之interaction(地图交互功能)
    vbind:class绑定样式,决定样式的显示与否
    cesium之measure功能实现
    Cesium渲染效果差,锯齿明显,解决办法
    CSS让DIV层叠 两个DIV或多个DIV顺序重叠加
    ES6之import/export命令
    vantui:
    Openlayers简单要素的添加
    Vue中的this表示?
  • 原文地址:https://www.cnblogs.com/hailong88/p/3293433.html
Copyright © 2011-2022 走看看