2012-01-08 29 views
1

是否有可能在模板中使用模板,列表可以是任何列表,並且字符串可以是任意字符串,所以我可以列出其他類型的字符串列表,例如int?「整數向量列表」 - 這個可能嗎?

浮現在腦海的第一件事:

std::list<std::vector<int>> listOfVectorsOfIntegers; 

可悲的是,它失敗了,所以我不知道,有沒有辦法合法地做到這一點?

編輯:對不起,我沒有真正使用字符串在我的情況下,只是鍵入它的隨機容器,而不考慮它不是一個模板。在我的情況下,問題是使用>>而不是>>,添加一個空的空間修復它。

+1

什麼是創建int串的想法?在'>>'中添加空格看起來像'>>',因爲C++將'>>'解釋爲biteshift。 – Hauleth 2012-01-08 11:20:11

+0

什麼是std :: string ? – 2012-01-08 11:20:47

回答

8

std::string是不是一類模板本身

你可能想其中的一個:

std::list<std::vector<int>> a; 
std::vector<std::vector<int>> b; 
std::list<std::list<int>>  c; 

在C++ 03和C++ 98時,>>應該由空格隔開;在C++ 11中,沒有這種需要。

+1

如果他在C++ 03中編寫而不是在C++ 11中,那麼它將再次失敗。 – Hauleth 2012-01-08 11:21:00

+0

你忘了std :: vector > d;在所有的例子中也是第二個「std ::」... – 2012-01-08 11:22:05

+0

@RoeeGavirel:哎呀。現在修復它。 – Nawaz 2012-01-08 11:23:06

0

std::string不是模板類。它是模板類的特定實例化的typedef:它是std::basic_string<char>的typedef。如果你想要一個int類型的字符串,你可以使用std::basic_string<int>。 (我並不是說這是一個好主意,但它是可能的。)

而且不要忘了>>之間插入空格,以防止它被解析爲>>操作。

std::list<std::basic_string<int> > listOfStringsOfIntegers; 
+1

+1但現在編譯器通常正確解析'>>'。 – 2012-01-08 11:22:48

+0

「正確地」表示錯誤消息表明需要爲我插入空格。是的,C++ 11改變了這一點,但我使用的編譯器默認使用C++ 03規則。 – hvd 2012-01-08 11:23:55

+0

誰會降低這個想法來解釋這個答案有什麼問題 - 基於我回答時的問題是什麼? – hvd 2012-01-08 19:57:37

0

std :: string不是模板類,你可能需要std :: vector或std :: list來代替。但答案是肯定的。

你可以有這樣的宣言:

std::list<std::list<int> > myList;

有兩個>字符之間的空間是很重要的,否則編譯器會不明白。 (編輯:我在這裏談論較舊的C++標準,這在C++ 11中應該不是問題。)

1
std::list<std::basic_string<int> > listOfStringsOfIntegers;