gpt4 book ai didi

德尔福2010 RTTI : Use TValue to store data

转载 作者:行者123 更新时间:2023-12-03 15:31:33 25 4
gpt4 key购买 nike

我希望能够使用 TValue 将数据存储在 TList<> 中。就像:

type
TXmlBuilder = class
type
TXmlAttribute = class
Name: String;
Value: TValue; // TValue comes from Rtti
end;

TXmlNode = class
Name: String;
Parent: TXmlNode;
Value: TXmlNode;
Attributes: TList<TXmlAttribute>;
Nodes: TList<TXmlNode>;
function AsString(Indent: Integer): String;
end;
...
public
...
function N(const Name: String): TXmlBuilder;
function V(const Value: String): TXmlBuilder;
function A(const Name: String; Value: TValue): TXmlBuilder; overload;
function A<T>(const Name: String; Value: T): TXmlBuilder; overload;
...
end;

implementation

function TXmlBuilder.A(const Name: String; Value: TValue): TXmlBuilder;
var
A: TXmlAttribute;
begin
A := TXmlAttribute.Create;
A.Name := Name;
A.Value := Value;
FCurrent.Attributes.Add(A);
Result := Self;
end;

function TXmlBuilder.A<T>(const Name: String; Value: T): TXmlBuilder;
var
V: TValue;
begin
V := TValue.From<T>(Value);
A(Name, V);
end;

稍后,在主程序中,我使用我的“流畅”xml 构建器,如下所示:

b := TXmlBuilder.Create('root');
b.A('attribute', 1).A('other_attribute', 2).A<TDateTime>('third_attribute', Now);

在第二次调用时,程序引发访问冲突异常。

看起来第一个 TValue 已被“释放”。真的可以使用 TValue 在运行时存储“Variant”数据吗?

我知道 Delphi 中存在变体。我的 XML 构建器将用于使用 RTTI 将 native delphi 对象序列化(反)序列化为 XML,因此我将在各处使用 TValue。

问候,

--皮埃尔·雅格

最佳答案

我找到了答案。我的错误。

function TXmlBuilder.A<T>(const Name: String; Value: T): TXmlBuilder;
var
V: TValue;
begin
V := TValue.From<T>(Value);
Result := A(Name, V); // I missed the return value
end;

抱歉;-)

关于德尔福2010 RTTI : Use TValue to store data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2139101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com