int plain_old_array[4];
3[plain_old_array] = 100;
int last_value = 3[plain_old_array];
int index = 2;
index[plain_old_array] = 546;
int value = index[plain_old_array];
В ходе рефакторинга старого кода осуществляю замену C-style массивов на ::std::array, при которой такие конструкции, естественно, перестают работать. Причем их достаточно большое количество, некоторые даже сделаны в виде макросов.
Я что-то не могу установить для себя, является ли такой вызов оператора индексирования какой-то особой хитростью, на которую автор пошел намеренно, или это просто кривой код. Кто-нибудь сталкивался с подобным?
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Здравствуйте, VTT, Вы писали:
VTT>Я что-то не могу установить для себя, является ли такой вызов оператора индексирования какой-то особой хитростью, на которую автор пошел намеренно, или это просто кривой код. Кто-нибудь сталкивался с подобным?
Думаю, что топикстартеру это известно.
Вопросов только два:
— нафига
— как починить
К сожалению, предложение разрешить делать operator[] внешним — хорошо, если в 17 стандарте появится, и то не факт.
То есть, сделать приставку к std::array не выйдет — ни снаружи, ни внутри.
Поэтому починку можно свести лишь к одному: кровавый рефакторинг и исправление во всех местах, где сломалась компиляция.
Перекуём баги на фичи!
Re[3]: оператор индексирования c обратным порядком операндов
Здравствуйте, MasterZiv, Вы писали:
MZ>А сделать оператор приведения к ссылке на массив, не ?
Прикручивать к stl костыль чтоб сэкономить немного на рефакторинге — сомнительная идея.
Еще при возврате к указателям одна из главных плюшек ::std::array — проверка на выход за пределы — теряется.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
Re: Оператор индексирования c обратным порядком операндов