Visitor の現在の位置をコンテナーに格納するための STL に似たイテレーターを使用して、C++ で Visitor パターンを実装しました。今、コンテナを繰り返しながら変更したいと思います。現在アクセスしているコンテナであっても、コンテナからアイテムを削除することに特に興味があります。
明らかに、これは訪問者の内部イテレータを無効にします。これはまさにこのアイテムを指していたからです。現在、すべてのイテレータのリストをコンテナに保存し、リストに何かが追加または削除されるとすぐにそれらを更新します。ある意味で、これはイテレーター (Observer として) とリスト (Observable として) に適用される Observer パターンに似ています。
別の方法として、現在のアイテムに何が起こったのか、どのように反復処理を進めるのかについて、visitor() メソッドが Visitor に何らかのヒントを返すようにすることを検討しましたが、それもあまり良い考えではないように思えます。次のアイテムを見つけることに本当に関心があります。
だから、私の質問は、アイテムがコンテナに追加されたり、コンテナから削除されたりしても、訪問者を動かし続ける最善の方法は何ですか.
よろしく、フロリアン
更新: コンテナーに対して 1 つのビジターが実行されていますが、visit() メソッド内では、同じコンテナーに対して任意の数の追加イテレーターを使用できます。コンテナ内のアイテムのいずれかが削除された visit() の呼び出しから戻った後でも、訪問者にコンテナ内の残りのアイテムを続行してもらいたいです。