Я сейчас думаю о сценарии, в котором я хочу универсальный класс, который вызывает Free
для своих элементов IF , которые относятся к типу объектов. Поэтому я попробовал следующее:
if (PTypeInfo (TypeInfo (T)).Kind = tkClass) then
begin
RttiType := RttiContext.GetType (TypeInfo (T));
FreeMethod := RttiType.GetMethod ('Free');
if (FreeMethod <> nil) then
FreeMethod.Invoke (FInstance, []);
end;
К сожалению, последняя строка не компилируется, что неудивительно, поскольку типы не совпадают. Вопрос: могу ли я получить его для компиляции? Я попытался привести к Pointer
, а затем к TObject
, но это дает мне недопустимую ошибку приведения типа. Есть ли способ получить FInstance : T
в TObject
ссылку, которую я затем могу передать Invoke
?
Или есть другой способ добиться того, чего я хочу? Обратите внимание, что весь смысл в том, чтобы получить все в этом классе, поэтому я не хочу создавать TObjectMyClass
, который просто принимает объекты.
Спасибо за вашу помощь.