私は小さな「遅延ベクトル」クラス (または遅延ベクトル) を作成しました。これは a のように見え、std::vector
a が使用されている場所ならどこでも使用できるはずですstd::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
}
};