std::function()函数std::bind()函数以及lambda
Posted gary-guo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了std::function()函数std::bind()函数以及lambda相关的知识,希望对你有一定的参考价值。
1、std::function介绍
类模板std::function是一种通用的、多态的函数封装。
std::function的实例可以对任何可以调用的目标实体进行存储、复制、调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其他函数对象等。std::function对象是对c++中现有的可调用实体的一种类型安全的包裹(函数指针这类可调用实体,是类型不安全的)。
通常std::function是一个函数对象类,它包装其他任意的函数对象,被包装的函数对象具有类型为T1,...,Tn的n个参数,并且返回一个可转换到R类型的值。std::function使用模板转换构造函数接收被包装的函数对象;
特别是,闭包类型可以隐式地转换为std::function。
std::function统一和简化了相同类型可调用实体的使用方式,使编码变得更简单。
简单的理解就是:
通过std::function对c++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function对象;让我们不再纠结那么多的可调用实体
2、std::function的原型
template<class R, class ... Args> class function<R(Args...)>
R是返回值类型,Args是函数的参数类型,实例一个std::function对象很简单,就是将可调用对象的返回值类型和参数类型作为模板参数传递给std::function模板类。例如
std::function<void()> f1;---->void f1(); std::function<int (int , int)> f2;---->int f2(int,int)
3、std::function的用法
以上是关于std::function()函数std::bind()函数以及lambda的主要内容,如果未能解决你的问题,请参考以下文章