我写了一个小“惰性向量”类(或延迟向量),它应该看起来像 astd::vector
并且可以在使用 astd::vector
的任何地方使用,但它会“惰性”加载它的元素,即它会加载元素n
(可能还有更多)每当有人访问 element 时从磁盘中获取n
。(原因是在我的应用程序中,并非所有元素都适合内存。)
这是此类LazyVector
,但const
使用此类向量的成员函数存在问题,请参见下文。
template<class T>
class LazyVector {
std::vector<T> 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<const std::string*> vec;
void fct(int n) const { // fct must be const
const std::string* str = vec[n];
// do something with str
}
};