Delphi-7バージョンにはRttiソリューションはありません。
レコード内のポインターの配列を使用して@ainの提案を実装したくない場合は、aを使用しvariant 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;