비연역적 컨텍스트에서 템플릿 인수 추론 관련 문제
이 코드 조각에서는 테스트 함수를 사용하려고 할 때 오류가 발생합니다. TMap
struct TMap { typedef std::map<T, T> Type; }; template<typename T> T test(typename TMap<T>::Type &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
특정 T 유형에 대해 TMap을 특수화하려는 경우 컴파일러는 std::map
이 문제를 해결하려면 테스트 함수를 호출할 때 T 템플릿 인수를 명시적으로 지정할 수 있습니다.
double d = test<double>(tmap);
double을 템플릿 인수로 지정하면 컴파일러는 tmap_의 유형을 올바르게 추론하고 TMap
위 내용은 추론할 수 없는 컨텍스트에서 `std::map`을 사용하면 템플릿 인수 추론이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!