¿Cómo puedo exponer los iteradores sin exponer el contenedor utilizado?

He estado usando C # por un tiempo y volver a C ++ es un dolor de cabeza. Estoy tratando de llevar algunas de mis prácticas de C # conmigo a C ++, pero estoy encontrando algo de resistencia y estaré encantado de aceptar su ayuda.

Me gustaría exponer un iterador para una clase como esta:

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;
};

¿Estoy tratando de algo que no es un problema? ¿Debo escribir typedef std :: vector <T> :: iterator? Espero depender solo del iterador, no del contenedor de implementación ...

Respuestas a la pregunta(4)

Su respuesta a la pregunta