перегруженный оператор [] для доступа и установки значения (C ++) - PullRequest
2 голосов
/ 28 марта 2012

Я впервые перегрузил оператор [] чем-то практичным, и я столкнулся с чем-то, о чем раньше никогда не думал. Я пытаюсь создать собственный массив, похожий на массив, который содержит указатели (и предлагает некоторые уникальные функции). Возвращение одного из указателей из моего класса с помощью оператора [] очевидно, но я также предполагал возможность изменить целевой адрес указателя извне. Возможно, я слишком обдумываю это, но не приведет ли присвоение к возвращаемому значению (например, fish [0] = lpHatAddress;) к ошибке, потому что возвращаемое значение - это просто адрес?

Единственное решение, которое я смог придумать, - это хранить указатели на указатели, и это заняло бы вдвое больше памяти. Я пропускаю что-то очевидное? Есть ли чистый способ сделать это?

Ответы [ 3 ]

3 голосов
/ 28 марта 2012

Вы должны иметь результат оператора быть ссылкой. Поэтому, если ваш тип данных int, оператор возвращает int&.

1 голос
/ 28 марта 2012

Стандартный трюк заключается в использовании прокси (или суррогатного) шаблона проектирования . Идея состоит в том, чтобы вернуть временный объект, содержащий ваш целевой указатель, который поддерживает как преобразование в указатель const T*, так и присваивание T&, которое пересылает назначение целевому указателю. Скотт Мейер обсуждает эту модель в своей книге More Effective C++.

1 голос
/ 28 марта 2012

Я думаю, что это: http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.12 должно помочь.

...