C 14의 일반 람다: 심층 분석
C 14의 일반 람다 등장으로 람다 표현식에 새로운 기능이 도입되었습니다. 자동으로 추론된 인수 유형이 있는 함수의 경우. 그러나 이러한 제네릭의 작동 메커니즘은 추측의 대상이었습니다.
초기 가정과 달리 제네릭 람다는 구현을 위해 C 템플릿에 의존하지 않습니다. 대신 람다의 클로저 유형에 대한 템플릿 호출 연산자와 관련된 고유한 접근 방식을 따릅니다.
예를 들어 일반 람다 표현식:
auto glambda = [](auto a) { return a; };
은 다음과 같은 클로저 유형을 생성합니다. 템플릿 호출 연산자:
class /* unnamed */ { public: template <typename T> T operator () (T a) const { return a; } };
호출 연산자는 auto의 각 인스턴스에 대해 발명된 유형 템플릿 매개변수를 기반으로 템플릿화됩니다. 람다의 매개변수 선언 이러한 매개변수를 사용하면 람다를 호출할 때마다 추론된 유형이 달라질 수 있습니다.
이 템플릿 기반 접근 방식은 각 고유 인수 유형에 대해 새 함수를 생성하는 C 템플릿과 다릅니다. 대신, 기본 유형 삭제를 통해 특수 함수 생성 없이 효율적인 구현이 가능하다는 점에서 Java의 제네릭과 더 유사하게 작동합니다.
요약하자면 C 14의 제네릭 람다는 기존 C 템플릿이 아닌 템플릿 기반 호출 연산자를 활용합니다. 이 디자인 선택은 표현력과 최적화 사이의 균형을 유지하여 자동으로 추론된 인수 유형을 사용하여 함수를 작업할 수 있는 편리한 수단을 제공합니다.
위 내용은 C 14 일반 람다는 전통적인 템플릿 없이 어떻게 유형 추론을 달성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!