如何在不暴露所用容器的情况下暴露迭代器?

Sta*_*ent 24 c++ encapsulation iterator stl

我一直在使用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吗?我希望只依赖于迭代器,而不是实现容器......

jon*_*ner 19

您可能会发现以下文章很有趣,因为它准确地解决了您发布的问题:关于面向对象和C++中的泛型编程之间的张力以及什么类型的擦除可以做到这一点