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

+ Recent posts