第一个:函数    

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

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

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

第二个:函数指针  

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

使用是直接当函数用;

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

第三个:重载了 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是什么要写具体的

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

C++ 中可调用的且有函数功能的东东的更多相关文章

  1. 详解C#中通过委托来实现回调函数功能的方法

    委托:类型安全的指向函数的指针 使用步骤 1:声明一个委托 delegate string DelString(string s) 2:定义一个委托变量 DelString del = new Del ...

  2. 调用微信扫一扫功能,踩坑'invalid signature'

    在vue项目中,调用微信扫一扫功能,在安卓系统下完全正常,ios系统下却报错'invalid signature'的错误,这可能令许多小伙伴困惑,经过查询大量博客相关资料,才找到了解决的方法. 原因: ...

  3. C#中可直接调用WIN32的API函数--USER32.DLL

    Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...

  4. FastReport调用Delphi中的人民币大写转换自定义函数

    FastReport调用Delphi中的人民币大写转换自定义函数   FastReport调用Delphi中的人民币大写转换自定义函数 function TJzpzEdit1.MoneyCn(mmje ...

  5. Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤

    原文地址: Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤 - 网络资源是无限的 - 博客频道 - CSDN.NET http://blog.csdn.net/fen ...

  6. C中如何调用C++函数、类内函数 \混编\链接

    在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂 ...

  7. C语言中如何调用另一个源文件里的函数

    在开发大型项目时,我们常常需要将一份源码分成多个源文件来进行编写,这样可以方便后期的维护.下面就介绍如何从一个源文件里调用另一个源文件的函数. 在源文件A1.c中调用A2.c 中的函数有两种方法: 1 ...

  8. Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数

    Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数~~~    呵呵... 看着有点晕.. 再解释一下就是 在Unity中 使用 C# 调用 C++ 写的 DLL, 但是在 ...

  9. 如何在c语言中源文件调用另一个源文件的函数

    在源文件A1.c中调用A2.c 中的函数有两种方法: 1.在A2.c中有完整的函数定义,在A1.c中添加一下要用到的函数原型(声明)就可以了,例如:在A2.c中:有函数void A2(){...};在 ...

随机推荐

  1. Python——assert、isinstance的用法

    1.assert 函数说明: assert语句是一种插入调试断点到程序的一种便捷的方式. 使用范例 assert 3 == 3 assert 1 == True assert (4 == 4) pri ...

  2. keepalived 热备

    概述 keepalived高可用集群      keepalived最初是为了LVS的,因为LVS无法进行自动检测服务器的节点状态(可以自动部署LVS)     keeplived后来加入VRRP给功 ...

  3. 从0开始,手把手教你使用React开发答题App

    项目演示地址 项目演示地址 项目源码 项目源码 其他版本教程 Vue版本 小程序版本 项目代码结构 前言 React 框架的优雅不言而喻,组件化的编程思想使得React框架开发的项目代码简洁,易懂,但 ...

  4. saver 的保存与恢复

    模型保存,先要创建一个Saver对象:saver=tf.train.Saver(), max_to_keep 是用来设置保存模型的个数,默认为5,即保存最近的五个模型,saver=tf.train.S ...

  5. HotSpot VM垃圾收集器

    最常用的HotSpot VM垃圾收集器是分代垃圾收集.该方案是基于两个观察事实. 大多数分配对象的存活时间很短. 存活时间久的对象很少引用存活时间短的对象. 上述两个观察事实统称为弱分代假设(Weak ...

  6. bzoj3767A+B Problem加强版

    bzoj3767A+B Problem加强版 题意: 求两个数的和,每个数绝对值≤10^(10^7). 题解: 又用Python水过了…… 代码: a=raw_input() b=a.split() ...

  7. 将python3打包成为exe可执行文件(pyinstaller)

    我们工作中可能会遇到,客户需要一个爬虫或者其他什么功能的python脚本. 这个时候,如果我们直接把我们的python脚本发给客户,会有两个问题: 1.客户的电脑或者服务器可能并没有安装python环 ...

  8. Dresdon二次开发

    在上一篇文章中,我们已经对Dresdon所提供的功能进行了简单的介绍.在这篇文章中,我们将介绍如何基于Dresdon进行二次开发. Dresdon的扩展点 就像上一篇文章所介绍的那样,Dresdon主 ...

  9. Blazor带我重玩前端(四)

    布局 Blazor中的布局和MVC中的布局是类似的. 创建布局 新建一个Razor页面,所有新增的布局都要继承LayoutComponentBase,同时标识自定义内容的输出位置,即标识Body的位置 ...

  10. 一个调用其他activity的完整例子,使用了 onActivityResult和startActivityForResult

    https://blog.csdn.net/qq_32521313/article/details/52451364 Android startActivityForResult基本用法2016年09 ...