首页 > 代码库 > C++11学习笔记之三lamda表达式,std::function, std::bind
C++11学习笔记之三lamda表达式,std::function, std::bind
//lamda
//first lamda
[]
{};
// second lamda
[]() //or no need () when paramater is null
{
std::cout << "second" << std::endl;
}();// last add(), express will call this lamda func
// 3 with return type
auto kkk = []()
{
return 1;
}();
// 4, set return type
auto kkkk = [] (int i) -> bool { return (bool)i; }(5);
//5, lamda capture, [=], [=,&], [&], [this][] 不捕获...
/*[&] 以引用的方式捕获
[=] 通过变量的一个拷贝捕获
[=, &foo] 通过变量的拷贝捕获,但是用foo变量的引用捕获
[bar] 通过复制捕获,不要复制其他
[this] 捕获this指针对应成员
*/
function, bind等,上代码
#include <iostream>#include <functional>using namespace std;typedef std::function<void()> fp;typedef std::function<void(int)> fpi1;void g_fun(){ std::cout << "global function bind" << std::endl;}class A{public: static void aFunStatic() { std::cout << "aFunStatic" << std::endl; } virtual void aFun() { std::cout << "aFun" << std::endl; } void aFunI1(int i) { std::cout << "aFunI1:" << i << std::endl; }};class DerivedA :public A{public: virtual void aFun() override { std::cout << "aFun in DeriveA" << std::endl; }};class B{public: void bCallAFun() { if(callFun) callFun(); } void bCallAFunStatic() { if(callFunStatic) callFunStatic(); } void bCallAFunI1(int i) { if(callFunI1) callFunI1(i); } fp callFunStatic; fp callFun; fpi1 callFunI1;};void main(){ B b; A a; //bind to global function fp f = fp(&g_fun); f(); //bind to class function //static b.callFunStatic = std::bind(&A::aFunStatic); b.bCallAFunStatic(); //no static function without parameter b.callFun = std::bind(&A::aFun, &a); b.bCallAFun(); //no static function with parameter b.callFunI1 = std::bind(&A::aFunI1, &a, std::placeholders::_1); b.bCallAFunI1(5); //about polymorphic DerivedA da; b.callFun = std::bind(&A::aFun, &da); b.bCallAFun();}
C++11学习笔记之三lamda表达式,std::function, std::bind
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。