• C++ 中可调用的且有函数功能的东东


    第一个:函数      

           其实函数在声明的时候都有个名字;

                             这个名字可以看作是是指针,将其直接赋值给函数指针

                             也可以看作是可取指的对其& 再赋值给函数指针

    第二个:函数指针  

                             通过其被赋值的方式可以看到,函数指针,也有两个意思

                             使用是直接当函数用;

                             或对其*再使用;一样样的

    第三个:重载了 Type operator(  )的类

    第四个:lambda表达式    [ ] ( )->Type {   } 

                                            [ ]捕获列表,用来使用调用该表达式函数的局部变量:参数可以为,&  =  具体变量名

                                                                                                                用 ,隔开。什么意思,也很简单,不说了

                                            () 参数列表,这个就不说了,每个函数都有的

                                            ->Type  这个是可选项,标识的是 返回的类型Type

                                                         若不写,则自由推断,可能有些复杂的会不正确

                                                        这是尾置返回类型

                                            { } 这个也不说了,都有

    第五个:使用bind函数生成可调用的东东;需要用到上面的几个

                                           bind(oldFunc,_2,_1, XXX) 

                                          oldFunc  原来的旧的可调用函数,就是上面的那几个

                                          oldFunc 后面几个参数实际上是oldFunc 原来的参数,从左到右依次列出

                                          生成的新的函数的参数的个数为占位符的个数,从左到右依次为_1,_2 ... 

                                          因此新的调用对象的参数 _1,_2 对应旧的参数是其相应的占位符的位置;

                                          比给函数参数赋值默认值的功能强大了一点  哈  哈

    第六个:function 类对象                                  

                                          

    非常重要的要点!

                例如有  Type oldFunc(...){  };

    注意一: 

                    Type (*ptr)(...) =  oldFunc ;其中ptr是 函数类型指针 声明的一个变量 ;

    注意二:typedef 别名

                  Typedef Type tptr(...);      tptr 就是 Type oldFunc(...);这个函数类型的别名

                   Typedef Type (*ptr)(...);   其实ptr 是 函数类型指针 的别名         

                    Typedef decltype(oldFunc) tptr;

                    Typedef decltype(oldFunc)*   ptr;

                                         //要知道 decltype返回的是这个函数指针的类型,加上*表示的是函数的指针。

                                        //decltype()内的参数是指针,因为oldFunc与&oldFunc基本上没啥区别

                                         // ptr 是decltype(oldFunc)* 的别名,即函数指针的别名

                   函数指针是可以作为参数传递给其他函数使用的;因此可以使用上述作为参数。

    注意三:如果一个函数 要返回一个函数的指针咋办呢

                   用auto   这个不用解释

                   如果知道具体的返回哪个函数类型指针  用 decltype(oldFunc)*   getFunc(..)  

                                                                     或者上述别名   ptr getFunc(...)  

                                                                     或者                 tptr* getFunc(...)

                                                                          类似于   int* getInt(){  }

                 auto  getFunc(...)->ptr;   这个写法 ,尾置返回类型 ,lambda 中也用到过

                                                          ptr是之前声明的函数类型指针的别名

    注意四: 那就是模板函数了

                             decltype(&oldFunc<T>)      这个里面要用&的,其返回类型就是一个函数类型指针 无需再加 *

                                                                        当然T是什么要写具体的

                     。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 相关阅读:
    16.14
    16.13
    JAVA JLabel自定义子类无法显示
    16.12
    16.11
    css实现垂直居中
    HTML5学习笔记
    HTML、Css中插入图片的一些问题
    MySQL的if函数
    java实现将汉字转为首字母、拼音
  • 原文地址:https://www.cnblogs.com/infoo/p/7681714.html
Copyright © 2020-2023  润新知