我写了一个小的"懒矢量"类(或延迟矢量),它应该看起来像一个std::vector
可用的地方std::vector
,但它可以加载它的元素"懒惰",即它将加载元素n
(可能还有一些)每当有人访问元素时从磁盘n
.(原因是在我的应用程序中,并非所有元素都适合内存.)
这是这个LazyVector
类,但是const
使用这样一个向量的成员函数存在问题,见下文.
templateclass LazyVector { std::vector elems_; void fetchElem(unsigned n){ // load the n-th elem from disk into elems_ etc } public: const T& operator[](unsigned n) const { fetchElem(n); // ERROR: ... discards qualifiers return elems_[n]; } T& operator[](unsigned n) { fetchElem(n); return elems_[n]; } // and provide some other std::vector functions };
正如我所说,当一个const
成员函数要求一个元素时,会出现问题LazyVector
.根据性质LazyVector
,访问元素不是 const
,即它将改变vec
下面的向量,这在此上下文中是被禁止的.该foo
成员函数必须const
和不能更改.我怎么解决这个问题?
class Foo { LazyVectorvec; void fct(int n) const { // fct must be const const std::string* str = vec[n]; // do something with str } };
GBegen.. 7
您可以在LazyVector类的实现中使用可变成员数据或const_cast.因此,您可以创建消耗类所需的constness幻觉,而不是实际上是const.
您可以在LazyVector类的实现中使用可变成员数据或const_cast.因此,您可以创建消耗类所需的constness幻觉,而不是实际上是const.