클래스 사이에 상속 유형 별칭이 있지만 클래스 템플릿 사이에 보이지 않습니다.템플릿 내 별칭 유형 상속
#include <iostream>
//template<typename T>
struct Test1
{
// using t1=T;
using t1=int;
};
//template<typename T>
struct Test2: public Test1//<T>
{
t1 x;
};
int main(int argc, char *argv[]) {
// Test2<int> a;
Test2 a;
a.x=5;
std::cout << a.x << std::endl;
}
을하고이 코드는하지 않습니다 :
#include <iostream>
template<typename T>
struct Test1
{
using t1=T;
};
template<typename T>
struct Test2: public Test1<T>
{
t1 x;
};
int main(int argc, char *argv[]) {
Test2<int> a;
a.x=5;
std::cout << a.x << std::endl;
}
는 종류의 템플릿을 상속하지 않습니다이 코드가 작동하는 이유는 이해가 안 돼요? Xeo 위의 댓글에서 지적 하듯 그렇게,
typename Test1<T>::t1 x;
과 :
는'두 번째 예제에서 t1'는 * 따라 이름 *입니다 (왜냐하면 그것이 발생하는 기본 클래스가'Test2'의 템플릿 매개 변수에 종속적 인 템플릿이기 때문에)'typename Test2 :: t1'을 사용하십시오. – Xeo
@xeo, yeah, 네 말이 맞아. 그게 효과가있어.하지만 왜 궁금해하니 .. – Antonio
@Xeo, 그거야. 필자는 오타를 만들었다 고 생각하고'typename Test1 :: t1'이 필요합니다. 나는하지 않고,'typename Test2 :: t1'을 사용하여 훨씬 행복하다. 감사. –
Omegaman