【发布时间】:2017-08-11 21:43:30
【问题描述】:
围绕 STL 容器编写包装类的正确方法是什么,它也是一个模板(可以接受泛型类型 T 作为元素)并允许我像直接使用 STL 容器一样使用迭代器?
我想做以下类型的事情
#include <list>
#include <iostream>
class MyClass{};
template<class T>
class Wrapper
{
public:
typename std::list<T>::iterator iterator;
std::list<T> elements;
iterator begin(){ return elements.begin(); };
iterator end(){ return elements.end(); };
};
int main()
{
Wrapper<MyClass> wrapper;
for (Wrapper::iterator it = wrapper.begin(); it != wrapper.end(); ++it)
std::cout<<"Hi"<<std::endl;
}
但是编译器说:
error: ‘iterator’ in ‘class Wrapper<T>’ does not name a type
【问题讨论】:
-
typedef typename std::list<T>::iterator iterator;或using iterator = typename std::list<T>::iterator;。正如所写,iterator是数据成员,而不是成员类型。
标签: c++ stl containers wrapper