C ++ - перегрузка операторов [], основанные на стороне назначения

Я пытаюсь написать динамический шаблон массива в 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)), но было бы неплохо иметь возможность использовать этот класс, как обычный массив.

10
задан Deduplicator 3 July 2015 в 17:13
поделиться