템플릿을 사용하여 Lambda에서 std::function으로 변환
C에서 템플릿을 사용하여 람다 함수를 std::function으로 변환하는 것은 다음과 같습니다. 도전적인 작업. 이를 달성하려면 템플릿 유형 추론이 필수적이지만 특정 시나리오에서는 제한이 있을 수 있습니다.
처음에는 람다를 std::function으로 변환하려는 시도가 템플릿 매개변수 누락 또는 후보 일치 불일치로 인해 실패할 수 있습니다. . 이 문제를 해결하려면 std::function
이 문제를 해결하려면 보다 미묘한 솔루션이 필요합니다. 템플릿 유형 추론은 람다에서 std::function 템플릿 매개변수를 직접 추론할 수는 없지만 추가 유형 제약 조건을 제공하여 유도할 수는 있습니다.
다음 접근 방식을 고려하세요. 구조 ID에 람다 함수 래핑< std::function
template <typename T> struct identity { typedef T type; }; template <typename... T> void func(typename identity<std::function<void(T...)>>::type f, T... values) { f(values...); }
이제 func를 호출할 때 std::function의 템플릿 매개변수를 다음에서 추론할 수 있습니다. 신원 구조. 이렇게 하면 명시적인 템플릿 매개변수 지정이나 추가 인수 전달이 필요하지 않습니다.
int main() { func([](int x, int y, int z) { std::cout << (x*y*z) << std::endl; }, 3, 6, 8); return 0; }
이 접근 방식은 템플릿 매개변수를 명시적으로 지정하지 않고 일반 람다를 std::function으로 변환하는 요구 사항을 충족하며 가변 변수의 커링을 허용합니다. 원래의 람다 서명을 유지하여 기능합니다.
위 내용은 템플릿을 사용하여 일반 C Lambda를 std::function으로 효율적으로 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!