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可调用对象 ...
随机推荐
- 关于Go Modules的一些内容
安装 配置环境 启用Go Modules go mod在Go >= 1.13才默认启用,在Go >= 1.11已经开始支持了go mod. 设置环境变量 # 启用go module exp ...
- queue模块笔记
queue被称为消息队列,数据不会混乱,也可以用于复杂业务传递元素,队列是多线程的利器,其内部有锁的机制可以控制数据的统一且安全 queue.Queue()按照先进先出原则 queue.LifoQue ...
- springboot2.0整合shiro遇到的问题
1.重启服务器,访问登陆页面,登陆成功后跳转的不是index,而是favicon.ico
- MySQL之表连接-> 内连接,左外连接,右外链接,全连接
1.首先创建student库 create database student; 2. 在数据库中创建boy表 和 girl表, mysql> create table boy( -> bo ...
- 「数据结构与算法之链表(Python)」(四)
什么是链表 顺序表的储存分为一体式结构和分离式结构,但总的来说存储数据的内存是一块连续的单元,每次申请前都要预估所需要的内存空间大小.这样就不能随意的增加我们需要的数据了.链接就是为了解决这个问题.它 ...
- 2019-2020 ICPC, Asia Jakarta Regional Contest
目录 Contest Info Solutions A. Copying Homework C. Even Path E. Songwriter G. Performance Review H. Tw ...
- testdisk修复磁盘文件
使用testdisk,分析之后,使用:P ,list文件,然后使用如下方法恢复文件 Use Right to change directory, h to hide Alternate Data St ...
- 【原创】go语言学习(二十)并发编程
目录 并发和并行 Goroutine初探 Goroutine实战 Goroutine原理浅析 Channel介绍 Waitgroup介绍 Workerpool的实现 并发和并行 1.概念A. 并发:同 ...
- Ubuntu16.04 安装 CUDA9.2(总结一些新手容易遇到的问题)
系统:Ubuntu16.04 64bit 显卡:Nvidia GEFORCE 940MX 驱动:NVIDIA-Linux-x86_64-396.18.run 软件:cuda_9.2.88_396.26 ...
- SQL - where条件里的!=会过滤值为null的数据
!=会过滤值为null的数据 在测试数据时忽然发现,使用如下的SQL是无法查询到对应column为null的数据的: select * from test where name != 'Lewis'; ...