Перегрузка оператора в квадратных скобках для принятия значения - PullRequest
7 голосов
/ 01 января 2011

Я пишу коллекционный класс.Я хочу перегрузить оператор квадратных скобок ([]), чтобы обеспечить доступ к элементам в коллекции.

int operator[](int i)
{
    // Do stuff here
}

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

myClassInstance[0] = value;

Я не вижу способа объявить оператор в квадратных скобках с дополнительным аргументом (значением, присваиваемым элементу).

Я знаю, что могу просто вернутьint & и вызывающая сторона может присвоить этому значение, но внутренне каждый элемент хранится в другом формате, чем тот, который был обнародован.

Возможно ли это вообще?

Ответы [ 3 ]

9 голосов
/ 01 января 2011

Напишите класс int_proxy, который неявно преобразуется в int и может быть назначен из int. Вам понадобятся как минимум две функции-члена:

operator int();
int_proxy& operator=(int);

В этом прокси-классе храните любую информацию, которая вам нужна для получения и установки значения в контейнере. Выполните поиск в операторе преобразования и присваивание в операторе присваивания.

2 голосов
/ 01 января 2011

Возвращает ссылку на объект, у которого есть оператор =, который может заполнить int, куда он должен идти. Посмотрите на трюк с булевыми векторами в STL для примера, если не обязательно чудесный пример.

1 голос
/ 09 ноября 2012

запись:

    int& operator[](int i)
    {
        // Do stuff here
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...