假设我有一堂课:
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_;
}
Whereinsert()
添加一个元素到easySet_
. difficultSet_
的成员根据 的成员而变化easySet_
。
我遇到的问题是,多次插入意味着difficultSet_
不断重新计算。所以我想difficultSet_
被懒惰地计算(即只有当difficultBegin()
, difficultEnd()
, ordifficultSize()
被调用时)。问题是,那我其实得把它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_;
}
我觉得这是一个糟糕的设计。有没有更好的办法?