반응형
명시 적 유형 매개 변수를 사용하여 템플릿 멤버 함수를 호출하려고하면 오류가 발생하는 이유는 무엇입니까?
나는 그것을 이해하지 못한다.에 대한 호출 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
여기 에서 키워드를 사용 하면 컴파일러가 왜곡 된 기호 덩어리가 아니라 템플릿 멤버 함수에 대한 완벽하게 유효한 호출을보고 있음을 인식하게됩니다.
도움이 되었기를 바랍니다!
반응형
'Development Tip' 카테고리의 다른 글
angularjs에서 제출시 유효성 검사 오류 메시지 표시 (0) | 2020.11.04 |
---|---|
haskell의 attoparsec 또는 parsec (0) | 2020.11.04 |
setBackgroundResource ()는 내 XML 레이아웃 속성을 버립니다. (0) | 2020.11.04 |
jQuery는 AJAX 스트림을 점진적으로 읽습니까? (0) | 2020.11.04 |
벡터를 무작위 화하는 방법 (0) | 2020.11.04 |