我试图找到一种访问一组容器的通用方法.除了另一个自定义列表外,我还有一个标准的矢量和列表.
自定义列表定义了一个迭代器;
class Iterator: public std::iterator<std::forward_iterator_tag, T> {
// ...
}
Iterator begin() {
return (Iterator(root));
}
Iterator end() {
return (Iterator(NULL));
}
Run Code Online (Sandbox Code Playgroud)
与适当的运算符重载.
理想情况下,我想这样做;
class Foo {
public:
Foo() {
std::list<int> x;
std::vector<int> y;
custom_list<int> z;
iter = x.begin(); // OR
iter = y.begin(); // OR
iter = z.begin();
// ...
};
private:
std::iterator<int> iter;
};
Run Code Online (Sandbox Code Playgroud)
但显然这些都是不同类型的迭代器.我可以假设所有容器都是相同类型的.
有没有一种优雅的方法来解决这个问题?
我一直在使用C#一段时间,回到C++是一件令人头疼的问题.我试图从C#获得我的一些实践与C++,但我发现了一些阻力,我很乐意接受你的帮助.
我想为这样的类公开一个迭代器:
template <class T>
class MyContainer
{
public:
// Here is the problem:
// typedef for MyIterator without exposing std::vector publicly?
MyIterator Begin() { return mHiddenContainerImpl.begin(); }
MyIterator End() { return mHiddenContainerImpl.end(); }
private:
std::vector<T> mHiddenContainerImpl;
};
Run Code Online (Sandbox Code Playgroud)
我在尝试一些不是问题的东西吗?我应该只是输入std :: vector <T> :: iterator吗?我希望只依赖于迭代器,而不是实现容器......