假设我有一堂课:
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_;
}
Where insert()
添加一个元素到easySet_
. difficultSet_
的成员根据以下成员的变化而变化easySet_
.
我遇到的问题是,多次插入意味着difficultSet_
不断地重新计算。所以我想要difficultSet_
延迟计算(即仅当difficultBegin()
, difficultEnd()
, or difficultSize()
叫做)。问题是,那么我实际上必须做difficultSet_
into a 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_;
}
但我觉得这是一个糟糕的设计。有没有更好的办法?
这完全就是这样做的方法。 Const 可以表示二进制 const,也可以表示概念上的 const。使用可变意味着你正在做后者,这很好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)