0

使用 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;

上述生产线可以由工厂处理。无论如何只是一个想法

4

0 回答 0