我写了一个小“惰性向量”类(或延迟向量),它应该看起来像 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
}
};