2013년 10월 2일 수요일

Lambda 요약

이름 없는 함수, 익명 함수의 의미로 용법은 다음과 같다:

void main()
{
   [] // lambda capture, 참조나 복사 형태로 외부 변수를 전달
   ()  // 함수의 인수 정의
   {} // 함수의 본체
   ()  // 함수 호출
}



(예1)
[] { std::cout <<"Hello, World!" << std::endl; } ();
 //  마지막에 ()가 있으니 호출까지 발생.

[] (String *s) {  std::cout <<s << std::endl; } ("Hello, World!");
 // 호출하면서 "Hello~" 스트링을 넘겨 주었고, 인자의 형식은 string
 // 이라는 것이 함수 인수 정의에 들어 갔음.  따라서, s에 "Hello~"가
 // 대입되고 함수 본체에서 출력이 발생.

auto func1 = [] {std::cout <<"Hello, World!" << std::endl; };
func1();
 // 맨 뒤에 ()가 없으므로 함수 호출은 일어 나지 않으며, 함수 객체의 선언이다.
 // 따라서 호출을 하기 위해서 이 객체에 ()을 붙임.

auto func2 = [] (float f) { return f; };
float f2 = func2(3.24f);
 // 함수 객체 func2는 인자로 실수형 f를 받아 들여
 // 이 값을 리턴한다.

auto func3 = [] () -> float { return 3.14; };
float f3 = func3();
 // 반환 타입을 명시적으로 변환: ->type


댓글 없음:

댓글 쓰기