如何创建模板类型迭代器的 STL 对象?我正在尝试创建模板类型的迭代器的 STL 对象(例如 Vector),如下所示
vector<vector<T>::iterator> it1;
这在 g++ 和 VC++ 中都失败了。两个编译器几乎都说了同样的话
克++
Main.cpp:8:49: error: type/value mismatch at argument 1 in template parameter li
st for `template<class _T1, class _T2> struct std::pair'
Main.cpp:8:49: error: expected a type, got `std::vector<T>::iterator'
VC++
error C2923: 'std::vector' : 'std::vector<T>::iterator' is not a valid template type argument for parameter '_Ty'
如果您正在创建具体类型的迭代器,则偏离课程,例如
vector<vector<int>::iterator> it1;
这是一个最小的失败示例
#include<vector>
#include<iterator>
using namespace std;
template<typename T>
class Spam {
public:
vector<vector<int>::iterator> it1; #Compiles Fine
vector<vector<T>::iterator> it2; #Fails
};
笔记
我从答案中了解到的是,如果类型依赖,则需要为关键字添加前缀typename
。如果是这样的话
vector< vector<T> > it;
也应该失败,但事实并非如此。如果typename
依赖名称是typedef