首页 > 代码库 > 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