16

さまざまな戻りタイプ(文字列、signed int、unsigned intなど)のメソッドを持つオブジェクト構造のVisitorパターンを実装しようとしています。

ここで、オブジェクト階層に、次の署名を持つAcceptメソッドを追加しました(C ++を使用)。

void Accept(Visitor *);

同じインターフェイス(void return typeを使用)を使用すると同時に、具体的なメソッドで異なるreturntypeを使用する方法を理解できません。

4

1 に答える 1

15

型階層の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;

繰り返しになりますが、ビジターの具体的な詳細は実装によって異なりますが、結果を返すのではなくビジターに格納できるという考え方です。

于 2012-04-15T18:31:35.437 に答える