[my_mod](int v_)->int{return v_ % my_mod;} //클로져 (Closure) 객체라고 명명
[] : 아무것도 캡처하지 않음
[&x] : x만 Capture by reference
[x] : x만 Capture by value
[&] : 모든 외부 변수를 Capture by reference
[=] : 모든 외부 변수를 Capture by value
[x, y] : x, y 를 Capture by value
[&x, y] : x는 Capture by reference, y는 Capture by value
[&x, &y] : x, y 를 Capture by reference
[&, y] : y 를 제외한 모든 값을 Capture by reference
[=, &x] : x 를 제외한 모든 값을 Capture by value
[this]: this pointer를 capture by value로 가져온다.
auto func = []{ return 3.14; }; // 가능
auto func = [](float f){ return f; }; // 가능
auto func = []()->float{ return 3.14; }; // 가능
C++14 에서 제너릭람다 사용가능 - auto를 파라미터로 받을 수 있음
auto vglambda = [](auto printer) { return 123; }; //vs2015 에서 가능
std::bind - 람다에 비해 가독성 및 성능이 떨어지므로 가급적 지향
스캇메이어스는 c++11 에서 람다가 bind보다 거의 우월하다고 한다.
c++14에서는 람다가 bind보다 확실히 낫다고 하니 람다를 무조건 권장한다.
std::function이란 타입을 쓰기 위해서는 <functional> 헤더필요
'프로그래밍 > C++' 카테고리의 다른 글
string::shrink_to_fit (0) | 2016.02.24 |
---|---|
C++ 컴파일오류 빌드오류 링크 (0) | 2016.02.12 |
Visual C++ 데이터 형식(범위) (0) | 2016.01.29 |
매크로(define) 재정의 충돌문제 해결 (0) | 2016.01.26 |
C++11 enum class (0) | 2016.01.21 |