当前位置:  开发笔记 > 编程语言 > 正文

设计一个懒惰的向量:const的问题

如何解决《设计一个懒惰的向量:const的问题》经验,为你挑选了1个好方法。

我写了一个小的"懒矢量"类(或延迟矢量),它应该看起来像一个std::vector可用的地方std::vector,但它可以加载它的元素"懒惰",即它将加载元素n(可能还有一些)每当有人访问元素时从磁盘n.(原因是在我的应用程序中,并非所有元素都适合内存.)

这是这个LazyVector类,但是const使用这样一个向量的成员函数存在问题,见下文.

template
class 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 {
  LazyVector vec;
  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.



1> GBegen..:

您可以在LazyVector类的实现中使用可变成员数据或const_cast.因此,您可以创建消耗类所需的constness幻觉,而不是实际上是const.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有