유형 정의에도 불구하고 Std::Function의 템플릿 인수에 존재하는 모호성
이 시나리오에서는 함수 'a'에 대해 여러 오버로드가 존재합니다. 다음의 뚜렷한 서명을 수락합니다. std::function:
모호성은 다음으로 인해 발생합니다. 두 기능 모두
template<class _Fx> function(_Fx _Func, typename _Not_integral<!...int>::_Type = 0);
기본적으로 모든 개체를 std::function으로 변환할 수 있으므로 유형 삭제가 용이하고 다음 항목의 처리가 가능합니다. 임의의 객체를 함수로 사용합니다.
문제를 더 자세히 설명하려면 다음과 같은 단순화된 내용을 고려하세요. 예:
template<class Signature> class myfunc{ public: template<class Func> myfunc(Func a_func){ // ... } };
'a'에 대한 오버로드 해결 중에 실행 가능한 오버로드를 식별할 수 없는 경우 컴파일러는 매개변수의 생성자 또는 인수의 변환 연산자를 사용하여 인수 변환을 시도합니다. 이 경우 변환은 myfunc의 생성자를 통해 발생합니다.
myfunc의 생성자는 무엇이든 허용하므로 function
결국 이로 인해 컴파일러는 호출할 'a'의 오버로드를 결정할 수 없게 되어 모호성이 발생합니다.
이 문제를 해결하려면 다음과 같은 여러 가지 옵션이 있습니다.
위 내용은 `std::function`의 템플릿 인수가 과부하 해결 시 모호성을 초래하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!