템플릿 함수 내에서 템플릿 멤버 함수 호출
제공된 코드 조각은 템플릿 함수 내에서 템플릿 멤버 함수를 호출할 때 발생하는 오류를 보여줍니다. :
<code class="cpp">template<class X> struct A { template<int I> void f() {} }; template<class T> void g() { A<T> a; a.f<3>(); // Compilation fails here }</code>
컴파일러가 이 코드를 컴파일하지 못하여 잘못된 멤버 사용과 관련된 오류를 보고하고 '&'를 잊어버렸을 수 있다고 제안합니다.
설명
코드가 멤버 템플릿 앞에 'template' 키워드를 명시적으로 지정하지 않고 멤버 템플릿을 호출하려고 시도하기 때문에 오류가 발생합니다. C 표준(14.2/4)에 따르면, 멤버 템플릿 전문화의 이름이 접미사 표현식의 점이나 화살표 뒤 또는 자격 있는 ID의 중첩 이름 지정자 뒤에 사용되는 경우 및 접미사 표현식 또는 자격을 갖춘 ID가 템플릿 매개변수에 명시적으로 종속되는 경우 구성원 템플릿 이름 앞에 키워드 '템플릿'이 추가되어야 합니다. 그렇지 않으면 이름이 템플릿이 아닌 것을 참조하는 것으로 간주됩니다.
해결 방법
이 문제를 해결하려면 '템플릿'을 명시적으로 지정하도록 코드를 수정해야 합니다. 멤버 템플릿 이름 앞에 ' 키워드:
<code class="cpp">template<class T> void g() { A<T> a; a.template f<3>(); // add 'template' keyword here }</code>
이 수정을 통해 컴파일러는 멤버 템플릿 함수를 올바르게 식별하고 호출할 수 있으며 코드는 성공적으로 컴파일됩니다.
위 내용은 템플릿 함수 내에서 템플릿 멤버 함수를 호출할 때 컴파일러가 컴파일에 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!