模板中类型别名的继承

时间:2013-07-28 21:34:05

标签: c++ templates inheritance alias

看起来我是类中的继承类型别名,但不是类模板之间的别名?我不明白为什么这段代码有效:

#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;
}

不通过模板继承类型吗?

1 个答案:

答案 0 :(得分:2)

以下内容可行:

 typename Test1<T>::t1 x;

并且,正如Xeo在上面的评论中指出的那样:

typename Test2::t1 x;