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 ";
    }
  • 相关阅读:
    解决在Pycharm中无法显示代码提示的问题
    解决在使用pip list时出现DEPRECATION
    Pycharm 有些库(函数)没有代码提示
    Oracle 11.2.0.4 For Windows 64bit+32bit 数据库
    Windows系统下oracle数据库每天定时备份
    PowerDesigner表创建脚本双引号问题
    Oracle11g 创建数据库中问题处理(必须运行Netca以配置监听程序)
    名人名言
    项目管理
    项目管理心得:一个项目经理的个人体会、经验总结(zz)
  • 原文地址:https://www.cnblogs.com/hailong88/p/3293433.html
Copyright © 2011-2022 走看看