3

これは Visitor パターンの一般的な問題であるに違いないので、標準的な解決策があるかどうかを確認したいと思います。

メソッドがツリークラス自体に組み込まれているツリートラバーサルをどのように再コーディングできますか?

class Node {
    void Traverse(SomeType& t) { ... }
};

ビジターを使用するコードに。頭に浮かぶ2つの解決策は次のいずれかです

class Visitor {
    stack<SomeType> argumentStack;

    void Visit() {
        // do work, add new arguments onto stack
        // call accept() on child objects
        // pop stack
    }
};

または、accept(Visitor&) および visit() メソッド自体に引数を追加します。しかし、これは、クラスに組み込まれた元のトラバーサルに勝るものはありません。

さらなる問題として、組み込みトラバーサル メソッドのそれぞれが異なる引数を取る場合、または一部の戻り値と他の戻り値がない場合、またはすべてが同じ型を返さない場合はどうなるでしょうか?

4

0 に答える 0