#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