que tengo una clase como la siguiente:Permitir el acceso a los objetos contenedor en C++
class Foo {
private:
std::map<std::string, Bar*> bars_by_name;
std::map<std::string, Baz*> bazs_by_name;
};
Ahora me gustaría para permitir al usuario acceder a las dos colecciones, pero ocultar el detalle de implementación que estoy almacenando el objetos en std :: maps. En cambio, me gustaría tener funciones de miembros que devuelvan, p. const iterators para las colecciones y posiblemente incluso un iterador personalizado que devuelve objetos de ambas colecciones, ya que Bar y Baz pertenecen a la misma jerarquía de clases. Teniendo en cuenta el estilo, ¿cuál sería la forma correcta de hacerlo en C++? En Java, probablemente establezca el tipo de retorno del método en Iterable o ajuste la colección en una colección no modificable.
Si utiliza algo como ['any_iterator'] (http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/any_iterator.html), puede ocultar el tipo subyacente sin filtrar detalles. También puede usar algo como transform_iterator o zip_iterator de Boost como intermediario sin que los usos sean más acertados. – Flexo