您的 Delphi-7 版本没有 Rtti 解决方案。
如果您不想在记录中使用指针数组来实现@ain 的建议,这里有一个使用 avariant part in the record
来完成类似事情的建议。您可以自由地使用myStruct.AddrX
名称以使代码更清晰,也myStruct.allAddresses[X-1]
可以解决相同的字段。
Type
FreeStruct =
record
intExample : Integer; // not in the variant part
case boolean of // Variant structure where the different parts overlap in memory
true : ( Addr1 : Pointer;
Addr2 : Pointer;
Addr3 : Pointer);
false : (allAddresses : array[0..2] of Pointer);
end;
procedure ClearFreeStruct( var AStruct : FreeStruct);
var
i: Integer;
begin
for i := 0 to High(AStruct.allAddresses) do
begin
// Dispose of allocated pointers
end;
end;
您可以使用更多指针扩展结构,还可以包括其他字段(在变体部分之前)。
可以在记录中使用指针数组而不放弃清晰度。通过使用enumeration
,可以使用相关名称来寻址每个指针。
示例:myStruct.Addr[peAddr1]
Type
PointerEnum = (peAddr1,peAddr2,peAddr3);
FreeStruct =
record
intExample : Integer;
Addr : array[PointerEnum] of Pointer;
end;
procedure ClearFreeStruct( var AStruct : FreeStruct);
var
pe : PointerEnum;
begin
for pe := Low(PointerEnum) to High(PointerEnum) do
begin
// Dispose(AStruct.Addr[pe]);
end;
end;