クラスがあるとしましょう:
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_
。mutable
difficultSize()
だから今、私のクラス宣言は次のようになります
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_;
}
ただ、これはデザインが悪い気がします。より良い方法はありますか?