私は、次の構成によって現在達成していることをうまく行うデザインパターンがあるかどうか疑問に思っています:
入力オブジェクトのセットに基づいて作成したいオブジェクトがあります。私の特定のケースでは、それらはストリームのようなオブジェクトです。計算中は非常に多くの状態を追跡する必要があるため、関数パラメーターとして渡したくないだけでなく、計算の値が必要な名前空間を汚染したくありません。だから私がやっていることは、おおよそ次のようなクラスを作成することです:
class objectCreator {
public:
objectCreator(stream_type & stream) : stream(stream) {
create();
}
std::unique_ptr<value_type> get() { return std::move(result); }
private:
void
create() { /* ... */ }
std::unique_ptr<value_type> result;
stream_type & stream;
// various state holding variables
};
私の問題は、明らかにget()
2 回呼び出しても意味がないことです。すでに呼び出されているかどうかを確認することで、それを防ぐことができますが、本質的に2回呼び出すことを防ぐ構造を使用したいと思います。(注: 私はすでにこのオブジェクトをどこかの関数呼び出しでラップしており、他の場所では使用しないでください。しかし、それは美しくありません。)