Я пытаюсь написать динамический шаблон массива в C ++
, я в настоящее время перегружаю работу операторов [], и я хотел бы реализовать другое поведение, основанное на какой стороне назначения, которые они используются на.
#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;
}
Я получаю ошибки компилятора при попытке перегрузки подобных по очевидным причинам.
Есть ли правильный способ сделать это?
Мой поиск до сих пор не был успешным. Все, что я видел с перегруженными [] операторами [], кажется, принимает, что пользователь может изменить хранимую элемент вне объекта.
Я реализовал методы использования (экземпляра (INT I), обновление (int i, t obj)), но было бы неплохо иметь возможность использовать этот класс, как обычный массив.