Delphi - Универсальный тип как параметр
Почему это не компилируется?
(Код из настраиваемого перехватчика JSON)
procedure myproc(MyObject: TObject);
procedure test(C: TClass);
begin
var ctx := TRttiContext.Create;
var typ := ctx.GetType(C);
for var fld in typ.GetFields do
begin
if fld.Name = 'anyfield' then
begin
TObjectList<Fld.ClassType>.Create(True);
end;
end;
typ.Free;
ctx.Free;
end;
begin
Test( MyOrgObject );
end;
что-то не так с: TObjectList <Fld.ClassType> .Create (True);
Любые идеи ? Спасибо
Хорошо, что у меня есть:
procedure TqBitObjectListInterceptor.StringReverter(Data: TObject; Field, Arg: string);
begin
if (Data is TqBitLogsType) and (Field = 'Flogs') then
begin
TqBitLogsType(Data).Flogs := TObjectList<TqBitLogType>.Create(True);
end else
if (Data is TqBitPrefsType) and (Field = 'Flist') then
begin
TqBitPrefsType(Data).Flogs := TObjectList<TqBitPrefsType>.Create(True);
end else...
end;
и так далее для каждой пары Тип / Поле с тем же кодом, я хотел бы иметь возможность назначить Data.Field TObjectList с помощью RTTI:
procedure TqBitObjectListInterceptor.StringReverter(Data: TObject; Field, Arg: string);
function Convert(C: TClass; F: string): boolean;
if (Data is C) and (Field = F) then
begin
var ctx := TRttiContext.Create;
var typ := ctx.GetType(Data);
for var fld in typ.GetFields do
begin
if fld.Name = F then
begin
fld.SetValue( TObjectList<C>.Create(True) );
end;
TObjectList<C>.Create(True); <<<<<
end;
end;
typ.Free;
ctx.Free;
Result := True;
end;
begin
Convert(TqBitLogsType, 'Flogs');
Convert(TqBitPreferenceType, 'Flist');
end;
Для справки: https://sourceforge.net/p/qbitvcl/code/HEAD/tree/trunk/
Модуль: uqBitAPITypes.pasprocedure TqBitObjectListInterceptor.StringReverter(Data: TObject; Field, Arg: string);