이동 캡처 람다 표현식에서 std::function을 생성할 수 있습니다. 그러나 특정 제한 사항이 적용됩니다.
템플릿 생성자
다음 템플릿 생성자를 사용하여 이동 캡처 람다에서 std::function을 생성할 수 있습니다.
template<class F> function(F f);
요구사항
이 생성자가 작동하려면 다음 요구 사항이 충족되어야 합니다.
이동 전용 유형
이동하는 람다에서 std::function을 구성하는 것은 없습니다 이동 전용 유형을 캡처합니다. 이는 std::function의 복사 생성자와 대입 연산자가 복사 생성 가능한 유형이 필요한 생성자의 관점에서 정의되었기 때문입니다.
예
다음 코드 조각을 고려하세요. :
auto pi = std::make_unique<int>(0); // Move-capturing lambda auto foo = [q = std::move(pi)] { *q = 5; std::cout << *q << std::endl; };
이 람다에서 std::function을 생성하려고 시도하는 중 다음 접근 방식 중 하나를 사용하면 컴파일 오류가 발생합니다.
std::function<void()> bar = foo; std::function<void()> bar{foo}; std::function<void()> bar{std::move(foo)}; std::function<void()> bar = std::move(foo); std::function<void()> bar{std::forward<std::function<void()>>(foo)}; std::function<void()> bar = std::forward<std::function<void()>>(foo);
이는 pi가 이동 전용 유형이고 std::function의 복사 생성자에 복사 생성 가능한 유형이 필요하기 때문입니다.
따라서 std::function과 함께 이동 캡처 람다를 사용하려면 해당 캡처가 복사 구성 가능한지 확인하세요.
위 내용은 이동 캡처 람다 표현식에서 `std::function`을 생성할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!