C++11 부터 Lambda(편의상, 람다)를 사용했다.
함수에 인수로 전달되는 위치에서 클로저를 정의하는 방법이다.
하기는 MS docs의 이미지다.
- capture절 (lambda-introducer) : 변수 캡쳐 영역
- 매개 변수 목록 필드. ( 람다 선언자)
- edit에 대한 passable여부에 대한 필드.(mutable여부)
- exception 필드.
- retrun type 필드.
- 람다의 본문 영역
1. capture 절에 여러 형태가 들어갈 수 있으며,
[=] : = 가 들어갈 경우 해당 람다를 call한 function의 모든 변수를 사용할 수 있다.
[&] : &의 경우 참조형으로 모든 변수를 사용한다는 의미.
변수 명을 사용해 그것만 참조 하도록 가능. ([args, ...])
2. 받을 매개변수에 대한 타입에 대한 지정.
3. 캡쳐 블록에서 복사한 복제본의 경우 const type이여서 editing 할 수 없음. 이때 mutable을 붙일 경우 const 가 없는 것으로 취급됨.
4. throw 할 수 있는 exception 정의
5. retrun type 정의 영역, 생략시 컴파일러가 임의 지정
6. 람다의 본문.
위 내용으로 간단히 람다의 구조에 대해 이해할 수 있을 것이다.
예제는 다른 블로그들에서 매우 친절하게 알려져 있으니 참고하면 좋을듯 하다.
Ms doc
https://docs.microsoft.com/ko-kr/cpp/cpp/lambda-expressions-in-cpp?view=msvc-160
C++의 람다 식
자세한 정보: c + +의 람다 식
docs.microsoft.com
디테일한 설명이 있는 블로그
https://hwan-shell.tistory.com/84
C++ Lambda 사용 이유와 사용 방법
C++에는 lambda라는 문법이 존제합니다. 원래 이 lambda는 boost라는 라이브러리에서 제공하는 함수였지만 지금은 modern c++로 넘어가면서 이 기능을 기본적으로 지원하게 되었습니다. (현재 modern c++은
hwan-shell.tistory.com