このような訪問者がいるとしましょう
class Visitor : IVisitor
{
void Accept(Visitable v)
{
/// other code
v.AChild.Visit(this);
v.BChild.Visit(this);
}
}
AChild と BChild はまったく同じ型にすることができますが、訪問コードはそれらを区別する必要があります (AChild では BChild とは異なる動作をする必要があります)。これを行う最善の方法は何ですか?
- 訪問者に状態を設定し、次の呼び出しでそれを確認します
- 各子に異なる訪問者を渡す
- 他の?
すみません、最初は逆にしました (現在Accept
は でしたVisit
)。Wikipedia に示されているパターンと一致するようになりました。
すべての訪問方法は次のようになります。
void Visit(IVisitor v) { v.Accept(this); }