После в этом посте Я реализовал метод доступа, подобный
template<class T> class qv {
virtual const T& operator[](int i) const = 0;
T& operator[](int i) { return const_cast<T&>(static_cast<const qv*>(this)->operator[](i)); }
};
template<class T> class qq : public qv<T> {
public:
const T& operator[](int i) const override { return this->data[i]; }
protected:
T data[5];
};
но получите assignment of read-only location
при попытке сделать что-то вроде:
int main(int argc, char** argv) {
qq<int> q;
q[3] = 2; // read-only location compile error, g++ 6.3
}
Это что-то с наследованием, которое вызывает проблемы, но я не знаю что или почему. Кроме того, имеет ли значение, если я использую static или const_cast для внутреннего приведения выше?