기본 클래스에서 템플릿이 아닌 멤버 함수를 호출 할 때 using
이라는 이름을 파생 클래스에 가져온 다음 사용할 수 있습니다. 기본 클래스의 템플릿 멤버 함수에도 가능합니까?템플릿 기본 클래스에서 템플릿 멤버 함수를 호출하는 방법은 무엇입니까?
그냥 using
으로는 (++ g로 - 스냅 샷-20110219 -std = C + +0) 작동하지 않습니다
template <typename T>
struct A {
template <typename T2> void f() { }
};
template <typename T>
struct B : A<T> {
using A<T>::f;
template <typename T2> void g() {
// g++ throws an error for the following line: expected primary expression before `>`
f<T2>();
}
};
int main() {
B<float> b;
b.g<int>();
}
나는 알고에서 명시 적으로 기본 클래스 접두어
A<T>::template f<T2>();
잘 작동하지만 질문은 다음과 같습니다. 단순한 선언을 사용하거나 사용하지 않고도 가능합니다 (f
이 템플릿 함수가 아닌 경우와 동일).
이럴 수없는 경우 그 이유를 아는 사람이 있습니까?
+1, 그리고 말장난의 신음 소리 : – dappawit
감사합니다 ,하지만 두 솔루션 모두 두 질문 모두'A :: template f ()'을 먼저 쓰는 것보다 쉽지 않으므로 답해주십시오. –
Lars
나는 이것이 '맛'의 문제 일지라도 '더 간단하다'고 생각합니다. 그러나 가상 함수가 예상대로 작동 할 수도 있습니다 (그러나 여기서는 문제가 아님). – dappawit