Abh*_*jit 2 c++ iterator stl g++ visual-c++
如何创建模板类型的迭代器的STL对象?我正在尝试创建一个模板类型的迭代器的STL对象(比如Vector),如下所示
vector<vector<T>::iterator> it1;
Run Code Online (Sandbox Code Playgroud)
这在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'
Run Code Online (Sandbox Code Playgroud)
VC++
error C2923: 'std::vector' : 'std::vector<T>::iterator' is not a valid template type argument for parameter '_Ty'
Run Code Online (Sandbox Code Playgroud)
如果你正在创建一个混凝土类型的迭代器,那么它就是一个例子
vector<vector<int>::iterator> it1;
Run Code Online (Sandbox Code Playgroud)
这是一个最小的失败的例子
#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
};
Run Code Online (Sandbox Code Playgroud)
注意
我从答案中理解的是,如果依赖类型,那么需要为关键字添加前缀typename.如果是那样的话
vector< vector<T> > it;
Run Code Online (Sandbox Code Playgroud)
也应该失败,但事实并非如此.它似乎只是失败,并且typename如果依赖名称是a ,则需要关键字typedef
您必须添加typename关键字:
vector<typename vector<T>::iterator> it2;
Run Code Online (Sandbox Code Playgroud)
这个页面帮助我最了解它.
| 归档时间: |
|
| 查看次数: |
1711 次 |
| 最近记录: |