#include <list>
#include <functional>
int LambdaStrategy( const std::list<int>& numbers, std::tr1::function<int (int ,int)> func )
{
int nSum = 0;
for ( std::list<int>::const_iterator it = numbers.begin(); it != numbers.end(); ++it )
{
nSum = func( nSum , *it );
}
return nSum;
}
int _tmain(int argc, _TCHAR* argv[])
{
std::list<int> numbers;
for ( int n = 0; n < 10; n++ )
{
numbers.push_back( n );
}
int value1 = []( int x, int y )->int { return x + y;}(1,2); //定义并使用
auto value2 = []( int x, int y )->int { return x + y;}(2,2); //定义并使用
auto func1 = []( int x, int y )->int { return x + y;};
int value3 = func1(3,3);
std::tr1::function<int (int ,int)> func2 = []( int x, int y )->int { return x + y;};
int value4 = func2(4,4);
//Lambda 实现类似于函数指针的功能
//简单替换算法,可以不用策略模式了
int nRes1 = LambdaStrategy(numbers, []( int x, int y )->int { return x + y;} );
int nRes2 = LambdaStrategy(numbers, []( int x, int y )->int { return x * y;} );
int nRes3 = LambdaStrategy(numbers, []( int x, int y )->int { return x - y;} );
return 0;
}