Как я могу получить тип подпункта TObjectList <T> исключительно по информации RTTI (то есть без использования какого-либо фактического экземпляра объекта) в Delphi?
Я реализую универсальный код для потоковой передачи произвольных объектов Delphi с использованием RTTI, и для того, чтобы заставить это работать (более конкретно, чтобы заставить загрузочную часть работать), мне нужно как-то получить тип подэлементаTObjectList<T>
поле без использования какого-либо фактического экземпляра объекта.
Очевидная причина требования не использовать какой-либо фактический экземпляр объекта состоит в том, что в случае загрузки объекта из потока (основываясь исключительно на знании типа класса загружаемого объекта) у меня не будет никакого экземпляра все, что доступно до завершения загрузки, - у меня будет доступ только к чистым данным RTTI рассматриваемого класса.
Примером такого класса, который я хотел бы иметь возможность загружать, является следующий:
TTestClass = class(TObject)
public
test_list : TList<string>;
end;
Я хочу сделать вывод, чтоtest_list
поле является общимTList<T>
гдеT
являетсяstring
(т. е. чтобы узнать, какие данные ожидать от потока для подпунктов).
Если класс вместо этого выглядит следующим образом:
TTestClassWithArr = class(TObject)
public
test_arr : array of string;
end;
Я мог бы использоватьElementType()
методTRttiDynamicArrayType
RTTI классtest_arr
поле для извлечения этой информации чисто через RTTI, но я не могу найти никакого соответствующего такого явного типа RTTI дляTObjectList<T>
.
Еще один вопрос переполнения стека (Delphi Rtti: как получить объекты изTObjectList<T>
), но действительно использует фактический экземпляр объекта, который данные RTTI отражают как «обман», чтобы получить доступ к подпунктам, что, опять же, не вариант для меня, так как эти подпункты не существовать в то время, когда я должен это знать.
На самом деле кажется, что должен быть какой-то способ сделать это, используя только информацию RTTI класса, так как вся информация о типе, очевидно, присутствует для него во время компиляции, независимо от создания объекта.