Это возвращает воспоминания. Есть еще одна интересная техника, которая подходит для таких древних версий Delphi, как ваша. Читайте дальше!
Из вашего описания вы говорите, что хотите довольно общий контейнер, т. Е. Тот, который вы можете использовать с различными типами. Это требует использования дженериков (да, используйте новый Delphi!) Но в прежние времена был немного хакерский способ реализовать шаблоны / дженерики с Delphi до 2009 года , используя серию define
с и include
с. Потребовалось немного погуглить, но вот статья об этих «дженериках» очень похожа на то, что я помню. Это с 2001 года; в те дни Delphi 5 была еще недавно.
Грубая идея такова: напишите класс, который будет делать то, что вы хотите (здесь, карта от ключа к значению) для типа, и заставьте его работать. Затем измените этот файл, чтобы использовать определенное имя для типа (TMyType
, что угодно), и удалите файл, чтобы он больше не был действительной единицей, а содержал только код. (Я думаю, что на самом деле два частичных файла: один для раздела interface
, другой для implementation
.) Включите содержимое файла, используя {$include ...}
, чтобы весь ваш файл Pascal компилировался с использованием ваших определений, а затем содержимого другие частично включенные файлы, которые используют эти определения. Аккуратный, хакерский, некрасивый? Я не знаю, но это работает:)
В примере статьи создается список типизированных объектов (т. Е. Список не TObject
, а TMemo
, TButton
и т. Д.). В результате получается файл, который выглядит следующим образом (скопировано из связанной статьи) :
unit u_MemoList;
interface
uses
Sysutils,
Classes,
Contnrs,
StdCtrls;
{$define TYPED_OBJECT_LIST_TEMPLATE}
type
_TYPED_OBJECT_LIST_ITEM_ = TMemo;
{$INCLUDE 't_TypedObjectList.tpl'}
type
TMemoList = class(_TYPED_OBJECT_LIST_)
end;
implementation
{$INCLUDE 't_TypedObjectList.tpl'}
end.
Вам нужно будет написать свой собственный класс, похожий на карту, хотя вы должны иметь возможность основывать его на этом классе. Я помню, что раньше в сети был набор «универсальных» контейнеров, которые могут использовали эту технику, и я бы предположил, что среди них есть map. Боюсь, я не знаю, где он и кем он был, и поиск в Google для такого рода вещей показывает много результатов для современных версий Delphi. Лучше всего писать свои собственные.
Редактировать: Я нашел ту же статью (тот же текст и контент), но лучше отформатирован на сайте Embarcadero Developer Network .
Удачи!