2010-07-22 53 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; 

之前。