> 백엔드 개발 > C++ > 내 컴파일러가 오버로드된 함수에서 템플릿 인수를 추론하지 못하는 이유는 무엇입니까?

내 컴파일러가 오버로드된 함수에서 템플릿 인수를 추론하지 못하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-25 05:47:14
원래의
1040명이 탐색했습니다.

Why Does My Compiler Fail to Deduce Template Arguments in Overloaded Functions?

함수 오버로딩 시 템플릿 인수 추론 문제

오버로드된 함수를 호출할 때 컴파일러가 템플릿 인수를 추론하지 못하는 문제가 발생했습니다. 이 동작의 이유를 자세히 살펴보겠습니다.

귀하의 코드는 각각 특정 인수와 반환 유형을 갖는 두 개의 템플릿 함수를 정의합니다. 그러나 유형 이름 S::type을 명시적으로 사용하면 템플릿 매개변수 A와 B에 대해 추론되지 않은 컨텍스트가 생성됩니다. C 표준(2003) 섹션 14.8.2.4에 따르면, 추론되지 않은 컨텍스트에만 나타나는 템플릿 매개변수는 템플릿 매개변수에 대해 고려되지 않습니다. 인수 추론.

주 함수에서 정수 값을 사용하여 이러한 오버로드된 함수(예: temp(c) 및 온도2(d, 7). c는 char 유형이고 d는 int 유형이기 때문에 컴파일러는 템플릿 인수를 추론할 수 없습니다. 그러나 이러한 인수는 추론되지 않은 컨텍스트에서만 사용됩니다.

이 문제를 해결하려면 템플릿 인수를 명시적으로 지정해야 합니다. 전화. 예를 들어 char 인수를 사용하여 temp를 호출하려면 temp(c)를 작성합니다. 이렇게 하면 컴파일러가 지정된 인수 유형을 기반으로 올바른 템플릿 특수화를 사용하게 됩니다.

비연역 컨텍스트의 개념과 템플릿 인수 추론에 대한 요구 사항을 이해함으로써 이러한 함정을 피하고 코드가 컴파일되도록 할 수 있습니다. 성공적으로.

위 내용은 내 컴파일러가 오버로드된 함수에서 템플릿 인수를 추론하지 못하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿