std::function以及std::bind
转自:https://blog.csdn.net/shuilan0066/article/details/82788954
示例1 : 普通函数
void gFunc()
{
cout << "gFunc" << endl;
}
int main()
{
std::function<void()> f = gFunc;
f();
getchar();
return 0;
}
示例2 模板函数 template <class T>
T g_Add(T i, T j)
{
cout << i + j;
return i + j;
} int main()
{
std::function<int(int,int)> f = g_Add<int>;
f(,); getchar();
return ;
}
示例三: 匿名函数 auto g_Lambda = [](int i, int j)
{
return i + j;
}; //匿名函数 此处有分号 int main()
{
std::function<int(int, int)> f = g_Lambda;
cout<<f(,); getchar();
return ;
}
示例四:函数对象 /函数对象
struct Add
{
int operator()(int i, int j)
{
return i + j;
}
}; //模板函数对象
template <class T>
struct AddT
{
T operator()(T i, T j)
{
return i + j;
}
}; int main()
{
std::function<int(int, int)> f = Add();
cout<<f(,)<<endl; std::function<int(int, int)> ft = AddT<int>();
cout << ft(, )<<endl; getchar();
return ;
}
示例5:类成员函数 class Computer
{
public:
static int Add(int i, int j)
{
return i + j;
} template<class T>
static T AddT(T i, T j)
{
return i + j;
} int AddN(int i, int j)
{
return i + j;
}
}; //存储对成员函数的调用 int main()
{
//1、 类静态函数
std::function<int(int, int)> f = &Computer::Add;
cout << f(, ) << endl; //2、 类静态模板函数
std::function<int(int, int)> ft = &Computer::AddT<int>;
cout << ft(, ) << endl; //普通函数绑定 需要构造类对象
Computer c; //3、 普通函数 需使用bind,将类对象地址 &c 绑定上
std::function<int(int, int)> fN = std::bind(&Computer::AddN, &c, placeholders::_1, placeholders::_2);
cout << fN(, ) << endl; //4、普通函数, 也可以这样调用 个人觉得这个比 bind 麻烦,不建议
std::function <int(const Computer &, int, int)> fN2 = &Computer::AddN;
cout << fN2(c,, ) << endl; getchar();
return ;
}
std::function以及std::bind的更多相关文章
- std::function,std::bind
std::function 和 std::bind 标准库函数bind()和function()定义于头文件中(该头文件还包括许多其他函数对象),用于处理函数及函数参数.bind()接受一个函数(或者 ...
- C++ 中std::function 、std::bind的使用和lambda的使用
std::function是可调用对象的包装器:std::bind是将可点用对象和其参数一起进行绑定,且绑定后的结果可以使用std::function对象进行保存,并延迟调用到需要调用的时候: 在C+ ...
- C++11 std::function、std::bind和lambda表达式
参考博客: C++可调用对象详解-https://www.cnblogs.com/Philip-Tell-Truth/p/5814213.html 一.关于std::function与std::bin ...
- C++11新特性应用--实现延时求值(std::function和std::bind)
说是延时求值,注意还是想搞一搞std::function和std::bind. 之前博客<C++11新特性之std::function>注意是std::function怎样实现回调函数. ...
- c++11 符号修饰与函数签名、函数指针、匿名函数、仿函数、std::function与std::bind
一.符号修饰与函数签名 1.符号修饰 编译器将c++源代码编译成目标文件时,用函数签名的信息对函数名进行改编,形成修饰名.GCC的C++符号修饰方法如下: 1)所有符号都以_z开头 2)名字空间的名字 ...
- C++11之std::function和std::bind
std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...
- std::function与std::bind 函数指针
function模板类和bind模板函数,使用它们可以实现类似函数指针的功能,但却却比函数指针更加灵活,特别是函数指向类 的非静态成员函数时. std::function可以绑定到全局函数/类静态成员 ...
- 转 C++11之std::function和std::bind
std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...
- 【浅析C++11】std::function和std::bind
目录 std::function可调用对象包装器 std::function基本用法 std::function/std::bind与抽象工厂.工厂方法的一点思考 std::function可调用对象 ...
随机推荐
- two pointers 思想
针对有序的序列特性做出的优化思想
- 2. kafka
目录: 1.kafka概念 2.kafka使用场景 3.相关术语 4.原理解析 5.项目实战 一. kafka是什么 https://www.jianshu.com/p/014af2b34159 Ka ...
- OpenSSL和Python实现RSA Key公钥加密私钥解密
基于非对称算法的RSA Key主要有两个用途,数字签名和验证(私钥签名,公钥验证),以及非对称加解密(公钥加密,私钥解密).本文提供一个基于OpenSSL和Python进行非对称加解密的例子. 1. ...
- PWA相关代码
sw.js 文件 let CacheName = 'plus-v1'; var filesToCache = [ ]; self.addEventListener('install', functio ...
- js 异步执行顺序
参考文章: js 异步执行顺序 1.js的执行顺序,先同步后异步 2.异步中任务队列的执行顺序: 先微任务microtask队列,再宏任务macrotask队列 3.调用Promise 中的res ...
- 17 webpack中babel的配置——静态属性与实例属性
// class关键字,是ES6中提供的新语法,是用来实现ES6中面向对象编程的方式 class Person{ // 使用static关键字,可以定义静态属性 // 所谓的静态属性,就是可以直接通过 ...
- java只能的round,ceil,floor方法的使用
三者均位于java.lange包下的Math类中 round: 在原来数字的基础上加上0.5后向下取整, 例如: Math.floor(11.5)=12; Math.floor(-11.5)=-11( ...
- framebufferfetch in vulkan
framebufferfetch在ogles上是个扩展 到vulkan这里做成一个基本功能了 对应的是subpass(对照metal) 不同renderpass不能stay on chip 只有sub ...
- vue 使用element ui报错解决方案
安装: npm i element-theme-default -S main.js增加 import ElementUI from 'element-ui' import 'element-ui/l ...
- 第十三章 使用ADO.NET访问数据库
一,什么是ADO.NET ADO.NET 是一种以面向对象的设计方法构建的数据访问和操作的类库,它建立在.NET平台上,以便于操作各种各样的数据源.这些数据源可以是数据库, 也可以是文本文件 ,EXC ...