동일한 람다를 여러 번 추가하지 않도록 람다를 감싸는 객체 (캡처 또는 비 캡처 )를 보유 하기 위해 세트와 같은 컨테이너 (예 QSet
: qt 또는 std::set
) 를 사용하려고 계획했습니다 std::function
. 그리고 이러한 클래스는 모두 키 유형에 대한 비교 또는 해시 계산 기능을 제공하는 사용자가 필요합니다.
그러나 내가 아는 한 기본 람다가 캡처하는 경우 target()
메서드가 반환 nullptr
되므로 std::function
반환 값을 기준으로 두 개의를 비교할 수 없습니다.
그래서 두 개의 임의 std::function
의를 어떻게 비교 하거나 적어도에서 고유 한 값을 계산할 수 std::function
있습니까?
모든 람다에는 고유 한 유형이 있으므로 목적에 맞게 target_type을 사용할 수 있습니다. 캡처하지 않는 람다 만 함수 ptr로 변환 할 수 있습니다. 컨텍스트에서 동일한 것이 무엇인지에 따라 두 함수가 동일한 지 여부를 비교하는 것은 쉬운 일이 아닙니다. "동일한"람다를 정의하는 코드에 여러 부분이있는 경우 여전히 다른 유형을 가질 수 있습니다.
auto l1 = [](){};
auto l2 = [](){};
l1과 l2는 다른 유형을 가지며 세트에 다른 항목을 작성합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다