我写了一个小的“惰性 vector ”类(或延迟 vector ),它应该看起来像一个 std::vector
并且可以在任何一个 std::vector
被使用,但它“延迟”加载其元素,即每当有人访问元素 n
时,它将从磁盘加载元素 n
(可能还有更多)。 (原因是在我的应用程序中,并非所有元素都适合内存。)
这是这个 LazyVector
类,但是使用这样一个 vector 的 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
,即它会改变下面的 vector 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
}
};
最佳答案
您可以在 LazyVector 类的实现中使用可变成员数据或 const_cast。因此,您可以创建消费类所需的常量幻觉,而实际上并不是常量。
关于c++ - 设计惰性 vector : problem with const,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/550418/