>백엔드 개발 >C++ >추론할 수 없는 컨텍스트에서 `std::map`을 사용하면 템플릿 인수 추론이 실패하는 이유는 무엇입니까?

추론할 수 없는 컨텍스트에서 `std::map`을 사용하면 템플릿 인수 추론이 실패하는 이유는 무엇입니까?

Linda Hamilton
Linda Hamilton원래의
2024-12-17 07:33:25912검색

Why Does Template Argument Deduction Fail with `std::map` in a Non-Deducible Context?

비연역적 컨텍스트에서 템플릿 인수 추론 관련 문제

이 코드 조각에서는 테스트 함수를 사용하려고 할 때 오류가 발생합니다. TMap 예:

struct TMap
{
    typedef std::map<T, T> Type;
};

template<typename T>
T test(typename TMap<T>::Type &amp;tmap_) { return 0.0; }

int main()
{
    TMap<double>::Type tmap;
    tmap[1.1] = 5.2;
    double d = test(tmap); // Error
}

이 오류는 컴파일러가 함수의 인수 tmap에서 T 템플릿 인수를 추론할 수 없기 때문에 발생합니다. 이러한 상황은 함수 호출의 인수에서 템플릿 인수를 추론할 수 없는 추론 불가능한 컨텍스트에 있기 때문에 발생합니다.

템플릿 기반 프로그래밍에는 컴파일러가 자동으로 다음을 수행할 수 있는 특정 상황이 있습니다. 함수 호출 인수에서 템플릿 인수를 추론합니다. 이를 템플릿 인수 추론이라고 합니다. 그러나 이 경우 컴파일러는 tmap_을 기반으로 T를 추론할 수 없습니다. 왜냐하면 TMap::Type에 직접 연결되지 않은 std::map의 인스턴스이기 때문입니다.

특정 T 유형에 대해 TMap을 특수화하려는 경우 컴파일러는 std::map TMap 및 TMap

이 문제를 해결하려면 테스트 함수를 호출할 때 T 템플릿 인수를 명시적으로 지정할 수 있습니다.

double d = test<double>(tmap);

double을 템플릿 인수로 지정하면 컴파일러는 tmap_의 유형을 올바르게 추론하고 TMap::Type과 일치한다고 결론을 내릴 수 있습니다.

위 내용은 추론할 수 없는 컨텍스트에서 `std::map`을 사용하면 템플릿 인수 추론이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.