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是什么要写具体的
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
C++ 中可调用的且有函数功能的东东的更多相关文章
- 详解C#中通过委托来实现回调函数功能的方法
委托:类型安全的指向函数的指针 使用步骤 1:声明一个委托 delegate string DelString(string s) 2:定义一个委托变量 DelString del = new Del ...
- 调用微信扫一扫功能,踩坑'invalid signature'
在vue项目中,调用微信扫一扫功能,在安卓系统下完全正常,ios系统下却报错'invalid signature'的错误,这可能令许多小伙伴困惑,经过查询大量博客相关资料,才找到了解决的方法. 原因: ...
- C#中可直接调用WIN32的API函数--USER32.DLL
Win32的API函数可以直接在C#中直接调用,在做WinForm时还是很有帮助的.有时候直接调用Win32的API,可以很高效的实现想要的效果. using System; using System ...
- FastReport调用Delphi中的人民币大写转换自定义函数
FastReport调用Delphi中的人民币大写转换自定义函数 FastReport调用Delphi中的人民币大写转换自定义函数 function TJzpzEdit1.MoneyCn(mmje ...
- Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤
原文地址: Eclipse中通过Android模拟器调用OpenGL ES2.0函数操作步骤 - 网络资源是无限的 - 博客频道 - CSDN.NET http://blog.csdn.net/fen ...
- C中如何调用C++函数、类内函数 \混编\链接
在C中如何调用C++函数的问题,简单回答是将函数用extern "C"声明,当被问及如何将类内成员函数声明时,一时语塞,后来网上查了下,网上有一翻译C++之父的文章可以作为解答,遂 ...
- C语言中如何调用另一个源文件里的函数
在开发大型项目时,我们常常需要将一份源码分成多个源文件来进行编写,这样可以方便后期的维护.下面就介绍如何从一个源文件里调用另一个源文件的函数. 在源文件A1.c中调用A2.c 中的函数有两种方法: 1 ...
- Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数
Unity C# 调用 C++ DLL 并在 DLL 中调用 C# 的回调函数~~~ 呵呵... 看着有点晕.. 再解释一下就是 在Unity中 使用 C# 调用 C++ 写的 DLL, 但是在 ...
- 如何在c语言中源文件调用另一个源文件的函数
在源文件A1.c中调用A2.c 中的函数有两种方法: 1.在A2.c中有完整的函数定义,在A1.c中添加一下要用到的函数原型(声明)就可以了,例如:在A2.c中:有函数void A2(){...};在 ...
随机推荐
- 1. 初识Jackson -- 世界上最好的JSON库
要想人前显贵,必须背后受罪.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...
- JS学习研究
//1.undefined 是派生自null的 //alert(undefined == null); //alert(undefined === null); ////结果 true false / ...
- Dynamics CRM Performance Issue when CRM Forms Opening
事情发生在Dynamics CRM 8.2.2版本,客户新升级到这个版本几个月的时间. 突然有一天,客户反映为什么我们打开CRM Form页面的时候loading的时间这么长呢?大概会需要5-15分钟 ...
- day36 作业
客户端 import struct import json from socket import * client=socket(AF_INET,SOCK_STREAM) # client.conne ...
- 大型Java进阶专题(七) 设计模式之委派模式与策略模式
前言 今天开始我们专题的第七课了.本章节将介绍:你写的代码中是否觉得很臃肿,程序中有大量的if...else,想优化代码,精简程序逻辑,提升代码的可读性,这章节将介绍如何通过委派模式.策略模式让你 ...
- 【JMICRO】 微服务简介及异步RPC体验
一,为什么写JMicro 印象中初次接触微服务大概是2011年,那会做Eclpise插件开发,网上查看好多关于OSGI的技术文章,发现Spring新出了一个叫Spring-boot的框架,那会没太上心 ...
- (二)pandas处理丢失数据
处理丢失数据 有两种丢失数据: None np.nan(NaN) import numpy as np type(None) NoneType type(np.nan) float 1. None N ...
- python数据处理(八)之展示数据
1.前言 1.1.不要擅自假定要讲的故事和数据是一致的,要先研究数据,然后讲述数据研究所得 1.2.讲故事是成为领域专家的重要部分. 1.3.将故事方法: a. 确定想要讲的故事 b.无论选择什么方式 ...
- picker-view、微信小程序自定义时间选择器(非官方)
picker-view自定义时间选择器 官网的自定义时间选择器比较简陋.日期不准 下面是我自己写的一个demo <view class="baseList"> < ...
- spring boot实现简单的登录拦截
一.思路 1.在pom.xml导入相关包 2.先写个简单的认证适配器(WebSecurityConfig extends WebSecurityConfigurerAdapter),登录拦截后就会跳转 ...