> 백엔드 개발 > C++ > 본문

템플릿 함수 내에서 템플릿 멤버 함수를 호출할 때 컴파일러가 컴파일에 실패하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-02 16:08:29
원래의
711명이 탐색했습니다.

Why does the compiler fail to compile when invoking a template member function within a template function?

템플릿 함수 내에서 템플릿 멤버 함수 호출

제공된 코드 조각은 템플릿 함수 내에서 템플릿 멤버 함수를 호출할 때 발생하는 오류를 보여줍니다. :

<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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