嵌套模板的可能性

时间:2010-07-22 16:57:40

标签: c++ templates nested

以下是否有效?:

template<typename T> class C { C1<C2<T>> someMember; };

3 个答案:

答案 0 :(得分:5)

好吧,你需要对这个类型做一些事情,要么把它变成一个typedef,要么是成员,但是是的:

template <typename T>
struct C1 {};

template <typename T>
struct C2 {};

template <typename T>
struct C
{
    typedef C1<C2T> > type; // note the space!
};

>>实际上是右移位运算符,因此您需要一个空格才能使其正常工作。但是,在C ++ 0x中,您只需键入>>;它解析得很好。*

*一些宽松的编译器目前会接受它。

答案 1 :(得分:1)

呃,不,至少不是孤立的,因为你没有C1C2的定义。假设它们被定义为带有一个参数的模板类,那么不,它仍然无效,原因与int;无效相同 - 它不是一个完整的语句,它只是一个类型名。

现在,如果您询问带有尖括号的语法,那么忽略所有其他问题,这只在C ++ 0x中有效。在当前的C ++标准中,解析是不明确的,您必须将其形成为C1<C2<T> >

答案 2 :(得分:1)

当然,我用过:

vector< pair<int, int> > blah;

之前。