0

私のアプリケーションは訪問者パターンを実装しています。同じインターフェースを実装している複数の異なる訪問者がいて、これらの各訪問者の訪問方法を定義するのに最適な場所を決定しようとしています。

私は当初、1 人の訪問者のすべての定義を含む 1 つの .cpp ファイル (訪問者ごとに 1 つのファイル) を用意するのが最善であると考えていました。このアプローチでは、各訪問者定義ファイルに、訪問する要素と、各訪問方法に必要なサポート機能の両方に対する多数の #include ディレクティブが含まれることになります。

別の方法として、各要素の定義を含む .cpp ファイルで各訪問者の訪問メソッドを定義することもできます。このアプローチでは、訪問者ヘッダーを除いて、必要なインクルード ディレクティブが既に存在します (したがって繰り返されません)。ビジター ヘッダーには、各要素の前方宣言のみが含まれているため、このアプローチの利点は、含まれるヘッダーの数が全体的に削減されることです。

elementa.cpp

#include ...
    ElementA specific stuff.
#include ...

void ElementA::accept(Visitor &visitor) {
    visitor.visit(*this);
}

void VisitorA::visit(ElementA &element)
{
    //do cool stuff
}

void VisitorB::visit(ElementA &element)
{
    //do other cool stuff
}

私の質問は、このように単一のファイルで複数のクラスのメソッドを定義することは受け入れられる/一般的ですか?

4

1 に答える 1

0

要素クラスにビジター関数を入れることは、2 つの理由から非常に珍しいことです。

  • これは、各訪問者のコードが分散されていることを意味します。一般的な経験則として、クラスのコードは 1 か所にまとめます。
  • Visitor の全体的な目的は、要素のアルゴリズムを分離することです。それらを同じ .cpp に入れて再結合する理由はありません。
于 2013-09-12T05:52:10.333 に答える