c++ 0x Lambda :在自己的项目中使用
最近项目里想用Lambda函数,但是网上找到的都是怎么在stl里使用,目前没有搜到在自己项目中使用的。经过几天的努力已经找到了使用方法,分享如下:
1.使用模板
Lambda本质上就是一个匿名的仿函数,因此模板函数里直接使用 operator ()来操作就行了
自己的模板函数:
#include <functional>using namespace std;template<class T>int lambda_test(const T& t){int i = 1234;return t(i);}class lambda_test2{public:template<class T>int test(const T& t){int i = 1234;return t(i);}};class lambda_test4{private:tr1::function<int (int i)> m_functor1;tr1::function<int (int i)> m_functor2;public://接收并保存lambda对象,方法1:template<class T>lambda_test4(const T& t):m_functor1(t){}//接收并保存lambda对象,方法2:void setLambda(const tr1::function<int (int i)> & f){m_functor2 = f;}int test1(){int i = 1234;return m_functor1(i);}int test2(){int j = 4567;return m_functor2(j);}};int lambda_test3(const tr1::function<int (int i)> &f){int i = 1234;return f(i);}int main(){int ret = lambda_test([](int i)->int{return i;});lambda_test2 test2;int ret2 = test2.test([](int i)->int{return i;});int ret3 = lambda_test3([](int i){return i;});lambda_test4 test4([](int i){return i;});test4.setLambda([](int i){return i*2;});int ret4 = test4.test1();int ret5 = test4.test2();return 0;}