Development Tip

명시 적 유형 매개 변수를 사용하여 템플릿 멤버 함수를 호출하려고하면 오류가 발생하는 이유는 무엇입니까?

yourdevel 2020. 11. 4. 20:53
반응형

명시 적 유형 매개 변수를 사용하여 템플릿 멤버 함수를 호출하려고하면 오류가 발생하는 이유는 무엇입니까?


나는 그것을 이해하지 못한다.에 대한 호출 f이 완전히 모호하지 않은 것 같지만 expected primary-expression before ‘int’. 에 대한 호출로 줄을 주석 처리하면 f잘 컴파일됩니다.

template<typename T>
struct A {
    template<typename S>
    void f() { }
};

template<typename T>
struct B : A<T> {
    void g() {
        this->f<int>();
    }
};

이는 유형이 템플릿 인수에 따라 달라지는 객체의 템플릿 함수에 액세스하려는 템플릿이 template있는 경우 이상한 방식으로 키워드 를 사용해야하는 표준의 매우 모호한 조항 때문입니다 .

this->template f<int>();

이것은 typename함수에 적용되는 것을 제외하고는 종속 유형이 나타나는 기이함과 유사 합니다. 특히 template키워드를 생략하면 사이에 구문 분석 모호성이 있습니다.

this->f<int>()

(당신이 의도 한 것), 그리고

((this->f) < int) > ()

의미가 없습니다 (따라서 귀하의 오류). template여기 에서 키워드를 사용 하면 컴파일러가 왜곡 된 기호 덩어리가 아니라 템플릿 멤버 함수에 대한 완벽하게 유효한 호출을보고 있음을 인식하게됩니다.

도움이 되었기를 바랍니다!

참고 URL : https://stackoverflow.com/questions/4942703/why-do-i-get-an-error-trying-to-call-a-template-member-function-with-an-explicit

반응형