私はこれらの線に沿った何かを扱っています:
非常に複雑なクラスと、クラスの初期化時に設定されない、または外出先で設定されるものに依存するメンバーがあります。そのクラスのオブジェクトは、そのメンバーが設定されていない場合でも意味があります。他のメンバーに加えられた他の変更に応じてリセットすることもできます。
ここで、この「特別な」メンバーの設定には計算コストがかかると想定します。そのため、要求に応じて計算を遅らせています。
それで:
class Class
{
X x;
Y y;
SpecialClass specialObject;
public:
void setX(const X& newX);
void setY(const Y& newY);
//----
SpecialClass getSpecialObject() /*const*/
{
computeSpecialObject();
return specialObject();
}
private:
void computeSpecialObject()
{
//specialObject depends on x and y
//and is expensive to compute
//this method is a bottleneck
}
};
compute
変更するたびに、x
またはコストがかかるため、メソッドを呼び出したくないy
ので、ジレンマが残ります。
const
?を削除します 論理的には、ゲッターはである必要がありますconst
が、そうではありません。オブジェクトでは呼び出せないという欠点もありconst
ます。- 私は作ることができますが
specialObject
mutable
、それは正しいことではないようです。 - 恒常性を捨てる?繰り返しますが、魚のように見えます。
- 取得する前に電話
computeSpecialObject
しますか?-誰かが忘れたらどうしますか?彼らは時代遅れの結果を得るでしょう。
これに対応するデザインパターンはありますか?良いアプローチ?それとも、クラスのデザインが間違っているのでしょうか。(私はこの最後のものに傾倒しますが、クラスを変更することは実際にはオプションではありません)
注:私はメンバーを作成しましたmutable
。より良い解決策があるかどうか知りたいです。