type TSomething = record
name: string;
value: integer;
end;
type TOtherSomething = record
data: extended;
data2: extended;
data3: array of TSomethingAlien;
end;
...
dynarray1: array of TSomething;
dynarray2: array of TOtherSomething;
また、タイプごとに要素を削除するという厄介な手順があります。
procedure TForm1.DeleteSomething(N: integer);
begin
if N > High(dynarray1) then Exit;
if N < Low(dynarray1) then Exit;
if N = High(dynarray1) then begin
SetLength(dynarray1, Length(dynarray1) - 1);
Exit;
end;
Finalize(dynarray1[N]) ;
System.Move(dynarray1[N +1], dynarray1[N],(Length(dynarray1) - N -1) * SizeOf(TSomething) + 1) ;
setLength(dynarray1, Length(dynarray1) - 1) ;
end;
procedure TForm1.DeleteOtherSomething(N: integer);
... got the idea?
プロシージャをグローバルオブジェクトにバインドするのは賢明ではありませんでしたvar Dyna: array of TSomething
が、関数の引数にaが含まれているとコンパイラがうめき声を上げたため、dynarray1にアドレス指定する代わりにDynaが使用されました。したがって、var引数を使用して複数のデータ型の関数をオーバーロードすることもできません。
SetLength(Dyna, length(dynarray1)
型の不一致!
SetLength(Dyna, length(Dyna)
型の不一致!
求められるもの:
過負荷
DeleteElement(var Arr: TMultipleTypes, N: element)
:上記を参照してください。なぜこの目標を達成できないのですか。配列内の任意のタイプのデータで機能する単一の
DeleteElement
実装?<template>タイプのサポートのようなものですか?