0

C++ では、リーダー関数、つまり、一度だけ実行され、何かを返し、その後消えるメソッドを実装したいと考えています。読み取りプロセスは少し複雑なので、1 つのヘルパー関数といくつかのヘルパー関数に分割するのが最善だと考えましたread(filename)。それらが誤ってアクセスされないようにするために、ステートレス クラスでこのすべてをラップし、それらのヘルパー関数をプライベートとしてマークすると考えました。ただし、これにより、最初にリーダー クラスのインスタンスを作成し、次にそれを呼び出さなければならないというコード オーバーヘッドが生じますread(filename)。それでは、ヘルパー関数を作成して、上記のクラスのインスタンスを作成し、 を呼び出しread(filename)、それをダンプして、読み取り出力を返します。

class Reader
{
public:
Reader();

virtual
~Reader();

OutputData
read(const std::string & fileName);

private:
helper1_();
helper2_();
helper3_();
};

OutputData
ReadIt(const std::string & fileName)
{
Reader r();
OutputData out = r.read(fileName);
return out;
}

うーん、それは少し過剰に設計されたにおいがします。これについてどう思いますか?

4

1 に答える 1

4

それは問題ないように思えますが、状態を持たない独立したヘルパー関数のセットだけが必要な場合は、無料の関数を使用して実装に隠すことをお勧めします。これを行う方法は、すべてのヘルパーを実装ファイルの匿名名前空間に配置することです。

ヘッダー ファイル:

namespace Reader {

OutputData reatIt(const std::string& filename);

} // Reader namespace

実装ファイル

namespace Reader {

namespace {

void helper1_() { .... }
void helper2_() { .... }
void helper3_() { .... }

} // anonymous namespace

readIt(const std::string& filename) {
  // use helpers here. Client code will never know.
}

} // Reader namespace
于 2012-08-10T15:21:40.340 に答える