std::function 템플릿을 사용할 때 모호함 여러 그럴듯한 과부하로 인해 발생할 수 있습니다. 특히 다음 코드 조각을 고려하세요.
#include
using namespace std;
int a(const function& f) { return f(); }
int a(const function& f) { return f(0); }
int x() { return 22; }
int y(int) { return 44; }
int main() {
a(x); // Call is ambiguous.
a(y); // Call is ambiguous.
}
function
std::function에 대한 템플릿 인수의 서명은 선언 및 정의 중에 해당 유형의 일부로 간주됩니다. 그러나 객체 생성 중에는 그렇지 않습니다.
std::function은 C의 많은 기능 객체와 마찬가지로 유형 삭제라는 기술을 사용합니다. 이를 통해 호출 시 예상되는 서명을 충족하는 한 임의의 개체나 함수를 허용할 수 있습니다. 단점은 일치하지 않는 서명과 관련된 오류가 생성자 수준이 아닌 구현 내부 깊은 곳에서 발생한다는 것입니다.
이 모호성을 우회하기 위한 세 가지 기본 옵션이 있습니다.
std::function의 템플릿 인수는 선언 및 정의 중에 유형을 결정하지만 객체 구성에서는 아무런 역할을 하지 않습니다. 이는 생성자가 임의의 인수를 허용할 때 모호성을 초래할 수 있습니다. 이 문제를 해결하기 위해 프로그래머는 명시적 유형 캐스팅, 함수 개체 래핑 또는 TMP를 사용할 수 있습니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3