C++11 lambda匿名函数用法详解
c++11随记:std::bind及 std::placeholders_但行技术的博客-CSDN博客_c++ placeholders
C++11的闭包(lambda、function、bind) - YZFHKMS-X - 博客园
Lambda表达式和智能指针 - bear-Zhao - 博客园 (cnblogs.com)
(717条消息) c++ std::thread lambda_后知后觉的博客-CSDN博客
function
C++11: std::function<void()> func; - 时光旅者 - 博客园
std::function 最大的用处是函数回调;
std::function介绍
类模版std::function
是一种通用、多态的函数封装。std::function
的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function
对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。
通常std::function是一个函数对象类,它包装其它任意的函数对象,被包装的函数对象具有类型为T1, …,TN的N个参数,并且返回一个可转换到R类型的值。std::function
使用 模板转换构造函数接收被包装的函数对象;特别是,闭包类型可以隐式地转换为std::function
。
最简单的理解就是:
通过std::function
对C++中各种可调用实体(普通函数、Lambda表达式、函数指针、以及其它函数对象等)的封装,形成一个新的可调用的std::function
对象;让我们不再纠结那么多的可调用实体。一切变的简单粗暴。
f3 = std::bind(&A, std::placeholders::_3,std::placeholders::_1,std::placeholders::_2) //f3(1.1,"abc",1) == A(1,1.1,"abc")
表示占位符3(1)对应A的第一个参数(1), 占位符1(1.1)对应A的第二个参数(1.1)
typedef std::function< bool (client_t, uid_t, gid_t, bool) > handler_t;
std::bind(&Handler, std::placeholders::_1, std::placeholders::_4)
bool Handler(client_t client_, bool subscribed) {
}
表示Handler只使用占位符1和占位符4的参数.