假设我有一堂课:
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_;
}
我觉得这是一个糟糕的设计。有没有更好的办法?