さまざまな戻りタイプ(文字列、signed int、unsigned intなど)のメソッドを持つオブジェクト構造のVisitorパターンを実装しようとしています。
ここで、オブジェクト階層に、次の署名を持つAcceptメソッドを追加しました(C ++を使用)。
void Accept(Visitor *);
同じインターフェイス(void return typeを使用)を使用すると同時に、具体的なメソッドで異なるreturntypeを使用する方法を理解できません。
さまざまな戻りタイプ(文字列、signed int、unsigned intなど)のメソッドを持つオブジェクト構造のVisitorパターンを実装しようとしています。
ここで、オブジェクト階層に、次の署名を持つAcceptメソッドを追加しました(C ++を使用)。
void Accept(Visitor *);
同じインターフェイス(void return typeを使用)を使用すると同時に、具体的なメソッドで異なるreturntypeを使用する方法を理解できません。
型階層のAccept
メソッドは単なるディスパッチャーであり、戻り値の型はありません。値を生成するための訪問が必要な場合、最も簡単な方法は、訪問者の状態の一部としてそれを追加することです。
struct times2 : visitor {
double value;
times2() : value() {}
void operator()( int x ) { value = x * 2; }
void operator()( double x ) { value = x * 2; }
};
object o;
times2 v;
o.accept( v );
std::cout << "Result is " << v.value << std::endl;
繰り返しになりますが、ビジターの具体的な詳細は実装によって異なりますが、結果を返すのではなくビジターに格納できるという考え方です。