Я пытаюсь написать шаблон динамического массива в С++
В настоящее время я перегружаю операторы [], и я хотел бы реализовать другое поведение, основанное на той стороне назначения, в которой они используются.
#include <iostream>
...
template <class T>
T dynamic_array<T>::operator[](int idx) {
return this->array[idx];
}
template <class T>
T& dynamic_array<T>::operator[](int idx) {
return this->array[idx];
}
using namespace std;
int main() {
dynamic_array<int>* temp = new dynamic_array<int>();
// Uses the T& type since we are explicitly
// trying to modify the stored object
(*temp)[0] = 1;
// Uses the T type since nothing in the array
// should be modified outside the array
int& b = (*temp)[0];
// For instance...
b = 4;
cout<<(*temp)[0]; // Should still be 1
return 0;
}
Я получаю ошибки компилятора при попытке перегрузить как это по очевидным причинам.
Есть ли способ сделать это?
Мой поиск до сих пор не прошел успешно. Все, что я видел с перегруженными [] операторами, похоже, соглашается с тем, что пользователь может изменять хранимый элемент вне объекта.
Я использовал методы для использования (instance (int i), update (int i, T obj)), но было бы неплохо использовать этот класс, как обычный массив.