zoukankan      html  css  js  c++  java
  • ###《Effective STL》--Chapter6

    点击查看Evernote原文

    #@author:       gr
    #@date:         2014-09-27
    #@email:        forgerui@gmail.com
    

    Chapter6 函数子、函数子类、函数及其他

    Topic 38: 遵循按值传递的原则来设计函数子类

    函数作为参数传递的是函数指针,所以尽量使函数子是单态的,可以使用这个函数去调用其它多态函数实现多态。这样也可以保证函数子的小巧

    Topic 39: 确保判别式是“纯函数”

      一个判别式是一个返回为bool类型的函数,包括判别子类和判别函数。纯函数所能访问的数据应该仅局限于参数的函数,不可修改状态。否则,在多次调用判别式时,可能改变状态而得到不同的结果。比如:在一个循环中多次调用一个判别式,可能得到不同的结果。
      所以将函数声明为const形式:

    class BadPredicate: public unary_function<Widget, bool>{
        pulbic:
            bool operator()(const Widget&)const{
                //不允许修改状态
                //...
                return ...;
            }
    }
    

      

    Topic 40: 若一个类是函数子,则应使它可配接

      如果一个函数子类的operator()只有一个实参,那么它应该从std::unary_function继承;如果函数子类的operator()有两个实参,那么它应该从std::binary_function继承。返回类型是operator()的最后一个实参。
      
      not1bind2nd只能用于可配接的函数对象,如果函数子类不是从unary_functionbinary_function继承而来,则无法配接。

    template<typename T>
    class MeetsThreashold: public std::unary_function<Widget, bool>{
        private:
            const T threshold;
        public:
            MeetsThreshold(const T& threshold);
            bool operator() (const Widget&) const;
    }
    

    Topic 41: 理解ptr_funmem_funmem_fun_ref的来由

      1. 使用STL算法可以调用函数,但无法使用类成员函数。mem_funmem_fun_ref被用来高速成员函数,使之可以像函数一样被接受。

    for_each(vw.begin(), vw.end(), mem_fun(&Widget::test));
    

      2. ptr_fun将函数传给STL组件时使用,可以不用,等编译器提醒时再加上。

    for_each(vw.begin(), vw.end(), ptr_fun(test));
    

    Topic 42: 确保less<T>operator<具有相同的语义

      less<T>默认调用operator<,如果修改less<T>,会使operator>less<T>意义不一致。
      当你需要另外一个less<T>版本实现时,尽量不要修改原less<T>,而是用其它名称进行命名,确保operator<less<T>有相同的意义。

    struct selfLess: public binary_function<Widget, Widget, bool>{
        bool operator()(const Widget& lhs, const Widget& rhs) const{
            return lhs.maxSpeed() < rhs.maxSpeed();
        }
    };
  • 相关阅读:
    python之路面向对象2
    [C#]扩展方法
    [UGUI]Text文字效果
    [UGUI]修改顶点
    [UGUI]帧动画
    [UGUI]图文混排(二):Text源码分析
    [UGUI]图文混排(一):标签制定和解析
    [Unity基础]镜头管理类
    [Unity工具]批量修改Texture
    323 XAMPP软件
  • 原文地址:https://www.cnblogs.com/gr-nick/p/3999730.html
Copyright © 2011-2022 走看看