2010-07-22 55 views
1

是下列有效?:嵌套模板的可能性

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

你究竟想要完成什么? – Jordan 2010-07-22 17:00:27

+0

我已经拿走了我能做的,但这是一个非常糟糕的问题。我们不知道'C1'和'C2'是什么,我们不知道你真正的问题是什么,你的目标是什么。不,它是无效的,因为'C1'和'C2'没有被定义,或者即使它们是我定义它们的方式,现在它也是无效的,因为'>>是右移运算符。如果我们引入一个空格,它是无效的,因为你只是命名了一个类型而没有声明任何东西。太不完整;如果您想要真正的答案,请提供真实的代码,真实的问题和真实的目标。 – GManNickG 2010-07-22 17:07:38

+0

您提供的答案是真实的。 – user383352 2010-07-22 17:09:08

回答

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

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

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

1

当然,我用:

vector< pair<int, int> > blah; 

之前。