使用Spring,当我为记录声明智能指针时
SmartPerson = IShared<Pperson>;
然后创建它
Smartperson := Shared<PPerson>.Make;
*顺便说一句,认为这真的很酷。
那我该如何在智能指针上获取RTTI?显然,我知道它是基于TPerson记录的,但是需要采取哪些步骤来逆转Spring首先分配指针时发生的情况?
我看到创建记录指针时,它使用的是这样的代码
tkPointer: IShared<Pointer>(Result) := Shared.TRecordFinalizer.Create(TypeInfo(T));
后跟这样的代码
constructor Shared.TRecordFinalizer.Create(typeInfo: PTypeInfo);
var
Size : integer;
begin
inherited Create;
fTypeInfo := typeInfo.TypeData.RefType^;
size := GetTypeSize(fTypeInfo);
fValue := AllocMem(Size);
end;
我的问题是,例如,如何通过使用智能指针本身来获取智能指针指向的记录字段?
希望如此,也许还有另一个愚蠢的问题。
为问题提供更多背景信息。我有一家工厂,使用RTTI为记录的字段构建控件。
procedure TForm3.Button1Click(Sender: TObject);
begin
Task := Shared<pTaskRecord>.make;
Task.AnalysisDates.ES := now;
Task.TaskType := TTaskTypes.DelayTask;
ControlFactory := TControlFactory.create(Self);
Edit := Controlfactory.GetControl('TAnalysisDates','ES');
if assigned(Edit) then
begin
AddObject(Edit.Invoke);
Edit.Value := @Task.AnalysisDates;
end;
end;
哪个工作。它基于记录上的属性标签返回TDateEdit
我在想也许我能做的就是这个
Edit := Controlfactory.GetControl(Task,Task.ES);
//passing in my smart pointer, along with field
那么工厂将拥有连接控件所需的一切,而不必自己在代码中完成。
Edit.Value := @Task.AnalysisDates;
以上行可以由工厂处理。无论如何只是一个想法