본문 바로가기

C..C++....

람다(Lambda) 활용하기.!


c++ 0x 에 람다함수가 새로 추가 되었다..
visual studio 2010버전에서부터 쓸수 있는데..

기본적인 람다식
auto func = []() 
{
   std::cout << "람다 테스트" << endl;
};

func();

인자가 있는 람다식
auto func = [](int k) 
{
   std::cout << "람다 테스트 int k : " << k <<  endl;
};

func(10);

반환값이 있는 람다식
auto func = [](int k) 
{
   return k;
};

int k = func(10);

반환값이 명시되어 있는 람다식
auto func = [](int k)  -> int // 반환값을 int로 지정한다!
{
   return k;
};

int k = func(10);

값을 참조 하는 람다식
int nNum = 10;
auto func = [&](int k)   // []안의 &는 참조.. 람다식 밖에 있는 변수를 참조한다 
{                                // [&nNum]과 같이 특정 변수만 가져올수도 있다!
   nNum = k;
};
func(10);

값을 복사 하는 람다식
int nNum = 10;
auto func = [=](int k)   // []안의 = 은 값을 복사 해온다. 
{                                // [nNum]과 같이 사용할수 있다.
   int nTest = nNum;
   nNum = k;               // 이와같이 하면 값의 복사기 때문에 nNum에 값을 넣어도 nNum의 값은 바뀌지 않는다.
};                              // 다군다나 람다식에서는 무의미하기 때문인지 에러를 발생시킨다.
func(10);

재귀함수로  사용하는 람다식
std::tr1::function<void(int)> funtest = [&funtest](int k)    //auto 대신 function을 사용했다.
{                                                //재귀 호출에서는 타입을 명시해야되기때문에 function으로
	if(k != 0)                              //람다식이 function임을 알려준다.
	{
		cout << k << endl;
		funtest(--k);
	}
};

funtest(10);                                                                              



visual studio 2010이 아니면 위에서 처럼 auto를 사용할수가 없다..
vs 2010 아래버전에서는.
std::tr1::function<반환값(인자)> 이런식으로 사용을 해야만 된다!.