是否可以在模板中使用模板,列表可以是任何事物的列表,字符串可以是任何字符串,所以我可以有一些其他类型的字符串列表,例如int?
首先想到的是:
std::list<std::vector<int>> listOfVectorsOfIntegers;
可悲的是,它失败了,所以我想知道,有没有办法合法地做到这一点?
编辑:对不起,我实际上并没有在我的情况下使用字符串,只是为随机容器键入它而不考虑它不是模板。在我的情况下,问题是使用&gt;&gt;而不是&gt; &gt;,添加一个空格就可以修复它。
答案 0 :(得分: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 :(得分:1)
std::list<std::basic_string<int> > listOfStringsOfIntegers;
答案 2 :(得分:0)
std::string
不是模板类。它是模板类的特定实例化的typedef:它是std::basic_string<char>
的typedef。如果你想要一个int类型的字符串,你可以使用std::basic_string<int>
。 (我不是说这是一个好主意,但它有可能。)
不要忘记在>
和>
之间插入一个空格,以防止将其解析为>>
运算符。
std::list<std::basic_string<int> > listOfStringsOfIntegers;
答案 3 :(得分:0)
std :: string不是模板类,您可能需要std :: vector或std :: list。但答案是肯定的。
你可以有这样的声明:
std::list<std::list<int> > myList;
在两个>
字符之间留一个空格很重要,否则编译器将无法理解它。 (编辑:我在这里谈论旧的C ++标准。这在C ++ 11中应该不是问题。)