728x90
1. 템플릿 람다 정의
- 템플릿 매개변수를 가진 람다.
2. C++ 11, C++14, C++ 20에 추가된 람다 비교
C++ 11 | 형식 있는 람다 ( Typed Lambda ) | 람다 식에 사용한 매개변수로 형 변환이 가능한 형식들만 사용 가능 |
C++ 14 | 일반적 람다 ( Generic Lambda ) | 모든 형식 사용 가능 |
C++ 20 | 템플릿 람다 ( Template Lambda ) | 템플릿에 사용한 형식과 반드시 같아야 함 |
3. 사용 방법
// C++ 11
auto addInt = []( int InA, int InB ) { return InA + InB; };
std::cout << addInt( 10, 20 ) << std::endl;
std::cout << addInt( 10, 20.0f ) << std::endl; // 20.f 값을 int로 형 변환 가능
// C++ 14
auto addAuto = []( auto InA, auto InB ) { return InA + InB; };
std::cout << addAuto( 10, 20 ) << std::endl;
std::cout << addAuto( 10, 20.f ) << std::endl; // 모든 형식 사용 가능
// C++ 14
auto addDeclType = []( auto InA, decltype( InA ) InB ) { return InA + InB; };
std::cout << addDeclType( 10, 20 ) << std::endl;
std::cout << addDeclType( 10, 20.f ) << std::endl; // 20.f 값을 int로 형 변환 가능
// C++ 20
auto addTypeName = []< typename T >( T InA, T InB ) { return InA + InB; };
std::cout << addTypeName( 10, 20 ) << std::endl;
//std::cout << addTypeName( 10, 20.f ) << std::endl; // 첫 형식과 다르므로 컴파일 에러
- decltype ( auto ) C++ 14에 추가된 타입 추론 키워드이다.
- decltype ( 추론하고자 하는 타입 )
4. 람다 표현식 만드는 방법
- 1. capture 절 ( lambda - introducer )
- 2. 매개 변수 목록 필드
- 3. 변경 가능한 사양 필드, () 연산자 함수를 비 상수 함수로 만들 수 있다.
- 4. 예외 사양 필드
- 5. 후행 반환 형식 필드
- 6. 람다 본문
[참고]
https://docs.microsoft.com/ko-kr/cpp/cpp/lambda-expressions-in-cpp?view=msvc-170
https://docs.microsoft.com/en-us/cpp/cpp/decltype-cpp?view=msvc-170
반응형
'C++ > C++ 20' 카테고리의 다른 글
[C++ 20] std::erase_if 를 이용한 요소 삭제 (0) | 2022.02.25 |
---|---|
[C++ 20] std::span (0) | 2022.02.25 |
[C++ 20] consteval, constinit 지정자 (0) | 2022.02.23 |
[C++20] 지명 초기화 (0) | 2022.02.22 |
[C++ 20] 삼항 연산자 <=> (0) | 2022.02.20 |