С++ - язык, который изучается постепенно.Оператор [] с нецелыми аргументами
                   Справочники Всё для создания сайта

Ссылки


Home
Бизнес
Справочники
Советы







Материалы книги получены с http://www.itlibitum.ru/

Имитация многомерных массивов

В любом варианте перегрузки оператор [] вызывается с одним аргументом произвольного типа. Например, компилятор лишь посмеется над следующей попыткой создания многомерного массива, потому что в ней оператор [] имеет несколько аргументов:

class WontWork {

public:

Foo& operator[](int x, int y); // Ха-ха-ха

};

Компиляторы обожают подобные ситуации - вроде бы все выглядит вполне логично, но как-то выпало из спецификации языка. Это дает им возможность поразмяться и вывалить все туманные сообщения об ошибках, которые они приберегли на черный день. Но когда сообщения перестанут сыпаться, наступает ваш черед смеяться, поскольку существует простой обходной путь.

struct Index {

int x;

int y;

Index(int ex, int why) : x(ex), y(why) {}

bool operator==(const Index& i) { return x == i.x && y == i.y; }

};

class WorksFine {

public:

Foo& operator[](Index i);

};

array[Index(17, 29)].MemberOfFoo(); // Работает

Index представляет собой структуру с тривиальным конструктором. Причина перегрузки оператора == станет ясна позже. Выражение Index(17,29) создает анонимный экземпляр, который упаковывает два измерения массива в один аргумент. Правда здорово? Получай, компилятор!


Назад    Содержание    Далее    

Home  Создание сайтов  Учебник по записи CD  Справочник Web дизайнера Самоучитель IE PHP и MySQL Компьютерные сети С++ E-mail me

Copyright 2007. Климов Александр. All Right Reserved.
Hosted by uCoz