クラスがあるとしましょう:
class NumberCollection
{
public:
typedef std::set<int> SetType;
typedef SetType::iterator iterator;
void insert(int n);
iterator begin();
iterator end();
size_t size() const;
iterator difficultBegin();
iterator difficultEnd();
size_t difficultSize() const;
private:
SetType easySet_, difficultSet_;
}
insert()に要素を追加する場所easySet_。difficultSet_のメンバーは のメンバーによって変わりeasySet_ます。
私が抱えている問題は、複数の挿入difficultSet_が常に再計算されることを意味することです。difficultSet_そのため、遅延計算を行いたい(つまり、 difficultBegin()、difficultEnd()、またはdifficultSize()が呼び出された場合のみ)。問題は、それ以外の場合は操作できないため、実際に作成する必要があることですdifficultSet_。mutabledifficultSize()
だから今、私のクラス宣言は次のようになります
class NumberCollection
{
public:
typedef std::set<int> SetType;
typedef SetType::iterator iterator;
void insert(int n);
iterator begin();
iterator end();
size_t size() const;
iterator difficultBegin();
iterator difficultEnd();
size_t difficultSize() const;
private:
SetType easySet_;
mutable SetType difficultSet_;
mutable bool upToDate_;
}
ただ、これはデザインが悪い気がします。より良い方法はありますか?