一段关于c++11中lambda表达式和std::function的体验代码

来源:互联网 发布:vscode代码提示快捷键 编辑:程序博客网 时间:2024/05/29 15:26
#include "stdafx.h"#include <iostream>#include <string>#include <functional>// lambda表达式可以使用std::function封装std::function<std::string(void)> getLambda1() {return [](){return "She said: ";};}// 要使用lambda表达式作为参数,需要使用函数模版template<typename Lambda>std::function<void(void)> getLambda2(Lambda l, const std::string& name){return [&](){l(name);std::cout << "Do you know me?" << std::endl;};}// 普通函数void foo() {std::cout << "I am foo!" << std::endl;}// 成员函数class CFoo{public:virtual void foo() {std::cout << "I am CFoo::foo!" << std::endl;}};//gcc 4.6.2 编译通过int _tmain(int argc, _TCHAR* argv[]){// auto类型可以自动推演出lambda表达式的类型auto lam1 = [&](const std::string& name){std::cout << (getLambda1())() << "I am " << name << ", a lambda expression!" << std::endl;    };lam1("Lucy");getLambda2(lam1, "Lily")();// 在不使用第三方库的情况下,函数指针和成员函数指针终于可以是一个东西了{std::function<void()> f = foo;f();CFoo bar;f = std::bind(&CFoo::foo, &bar);f();}return 0;}
转载自http://www.cnblogs.com/legendlee/archive/2012/10/19/2730369.html
0 0