Оператор шаблона [] = - PullRequest
       13

Оператор шаблона [] =

1 голос
/ 06 октября 2011

В качестве упражнения я делаю шаблон класса Array, и я хотел бы выполнить это:

Array<int> a[5];

a[4] = 2;

Как мне написать такую ​​вещь?
Я пробовал:

template<class T> class Array{
...
T operator[(const int loc)]=(const T temp);

1 Ответ

8 голосов
/ 06 октября 2011

Вы пишете operator [], который возвращает ссылку на элемент. Будучи ссылкой, он может быть назначен через =.

template <typename T>
class Array {
    …
    T& operator [](unsigned int const loc) {
        …
    }
};

(const в аргументе обычно не используется, но используйте его в определении функции - однако в объявлении это не имеет смысла.)

Обычно вам нужен другой оператор версии, который является const, так что вы все равно можете читать значения из массива const:

Array<int> x;
Array<int> const& y = x;

std::cout << y[0]; // Won’t compile!

Чтобы компилировать последнюю строку, добавьте следующий код в ваш класс:

T const& operator [](unsigned int const loc) const {
    …
}

Обратите внимание, что как возвращаемое значение, так и сама функция помечены как const.

...