ich eine Klasse wie unten haben:Zulassen des Zugriffs auf Containerobjekte in C++
class Foo {
private:
std::map<std::string, Bar*> bars_by_name;
std::map<std::string, Baz*> bazs_by_name;
};
Nun möchte Ich mag, damit der Benutzer beide Sammlungen zugreifen, aber die Umsetzung Detail verbergen, dass ich das bin Speichern Objekte in std :: maps. Stattdessen möchte ich Memberfunktionen haben, die z. Const Iteratoren für die Sammlungen und möglicherweise sogar einen benutzerdefinierten Iterator, der Objekte aus beiden Sammlungen zurückgibt, da Bar und Baz zu derselben Klassenhierarchie gehören. Was wäre der richtige Weg, dies in C++ zu tun? In Java würde ich wahrscheinlich den Rückgabetyp der Methode auf Iterable setzen oder die Sammlung in eine unmodifizierbare Sammlung umbrechen.
Wenn Sie etwas wie ['any_iterator'] (http://thbecker.net/free_software_utilities/type_erasure_for_cpp_iterators/any_iterator.html) verwenden, können Sie den zugrunde liegenden Typ verbergen, ohne Details zu verlieren. Sie können auch etwas wie Boosts transform_iterator oder zip_iterator als Vermittler verwenden, ohne dass Sie sich dafür interessieren. – Flexo