Хочу сделать универсальный контейнер. Столкнулся с тем, что либо контейнер содержит данные стандартных типов (integer, string, real), либо объекты (TЛюбоеЧтонибудьОтTObject)
Может как нибудь в Run time можно отличить что находится по указателю на ячейку памяти объект или нет.
Вот интерфейс контейнера: (где __listType задаётся в Design time, а затем то, что ниже подключается {I unitname.inc})
type
__pListType = ^__listType;
__cListItem = class
private
value : __pListType;
next, prev : __cListItem;
end;
__cList = class
private
list,
last : __cListItem;
function GetItem(idx: integer): __listType;
procedure SetItem(idx: integer; const Value: __listType);
public
constructor Create;
destructor Destroy; override;
procedure Clear;
procedure Append(const value : __listType);
property Items[idx:integer] : __listType read GetItem write SetItem; default;
end;
Для стандартных типов всё ОК. Dispose(list.value) и всё. А для объектов надо ещё list.value^.Free сделать.
Не хотелось бы делать два разных template'а.
--
Если я рассуждаю логично, это значит только то, что я не сумасшедший, но вовсе не доказывает, что я прав (с)И.П. Павлов