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

#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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值