Как я могу получить тип подпункта 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 класса, так как вся информация о типе, очевидно, присутствует для него во время компиляции, независимо от создания объекта.

Ответы на вопрос(2)

Ваш ответ на вопрос