我在尝试实现的c ++类遇到了一些麻烦。
我为std::vector<T>
子类化,但无法获得迭代器。这是我的示例代码:
这条线
MyPairList::iterator Item = this->begin();
我无法将迭代器添加到模板类。
我该如何解决这个问题,以及为什么会这样,因为现在我完全茫然了。这也都在我的.h文件(没有.cpp文件)中进行了描述。
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
template<typename T>
class MyPairList : public vector<T>
{
public:
void Form()
{
_idColl.clear();
_nameColl.clear();
MyPairList::iterator Item = this->begin();
for ( ; Item != this->end() ; ++Item)
{
_idColl.insert(make_pair( (*Item)->ID, (*Item) ));
_nameColl.insert(make_pair( (*Item)->Name, (*Item) ));
}
}
T Lookup(int pID)
{
if (_idColl.find(pID) != _idColl.end())
{
return _idColl[pID];
}
return T();
}
T Lookup(const string &pName)
{
if (_nameColl.find(pName) != _nameColl.end())
{
return _nameColl[pName];
}
return T();
}
MyPairList()
{
}
private:
unordered_map<int, T> _idColl;
unordered_map<string, T> _nameColl;
};
最佳答案
代替
MyPairList::iterator Item = this->begin();
采用
typename std::vector<T>::iterator Item = this->begin();
另一种选择是创建类型别名。
using iterator = typename std::vector<T>::iterator;
using const_iterator = typename std::vector<T>::const_iterator;
然后,您可以使用:
iterator Item = this->begin();
关于c++ - C++ Typedef和子类化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30679344/