Ich bin schon ein paar Mal auf dieses Problem gestoßen und würde gerne herausfinden, ob es eine einfache Methode oder ein Muster gibt, mit dem ich es lösen kann.
Stellen Sie sich eine Baumstruktur vor, in der jeder Knoten einen STL-Container (Vektor) mit Zeigern auf Kinder enthält. Ich möchte, dass der Client-Code in der Lage ist, diesen Baum zu durchlaufen und die untergeordneten Container zu durchlaufen, um auf andere Teile zuzugreifen.
Mein Problem ist, dass ich die Kapselung für meine Knoten beibehalten möchte, während zur gleichen Zeit lassen Clients leicht alle Kinder für diesen Knoten sehen. Ich möchte auch sicherstellen, dass, wenn ein Client einen Const-Verweis auf den Root-Knoten im Baum erhält, dann alle Zugriff auf nachfolgende Teile des Baums sind auch const.
Sollte ich versuchen, eine Iterator-Klasse für meine Knoten-Typ zu machen, haben eine Knoten-Methode zurückgeben Vektor-Iteratoren, oder gibt es ein eleganteres Muster, das ich vermisse?
Edit : Ich möchte noch einmal betonen, dass ich zwar einige gute Ideen vorgebracht sehe, aber ich habe Container mit Zeiger zu anderen Knotenpunkten. Die Rückgabe eines vector<node *>::const_iterator
wird nicht verhindern, dass Clients Nicht-Konst-Methoden auf dem Knoten aufrufen. Sie schützt nur die Zeiger selbst davor, auf andere Objekte zu zeigen.