[#] [Из песочницы] Индексация глобальная и не очень
habrabot(difrex,1) — All
2017-11-22 07:30:05


Сразу оговорюсь, статья не имеет ничего общего с индексацией сайтов и т.п. Речь пойдет о вещах куда более простых, но, тем не менее, нужных. Иногда надо проиндексировать сущности, так чтобы индексы были уникальны в рамках программы и компактно упакованы в промежуток [0..N]. Причем заводить для этого отдельные механизмы совершенно не хочется.

Примером может послужить такая задача:

Всем, думаю, известно, что class var в Delphi есть не что иное, как обычная глобальная переменная, единая для класса и всех его потомков. А иногда нужно, чтобы потомки использовали свои собственные, например, для подсчета экземпляров класса. Я знаю как минимум [одно решение][1] этой проблемы, но это хак. Кроме того он требует от пользователя дополнительных действий — выделения памяти в блоке initialization и, по-хорошему, освобождения ее в finalization.

Но можно сделать и проще — завести глобальный (class var) массив, и сделать так, чтобы каждый потомок ссылался на свою ячейку. Единственная проблема в том, что для этого требуется проиндексировать потомков, причем сделать это автоматически. [Читать дальше →][2]

[1]: http://hallvards.blogspot.ru/2007/05/hack17-virtual-class-variables-part-ii.html
[2]: https://habrahabr.ru/post/342868/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut