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?
将过程绑定到全局对象并不聪明,但编译器抱怨,当 avar Dyna: array of TSomething
在函数参数中时,所以使用 Dyna 而不是寻址到 dynarray1。所以我什至不能用 var 参数重载多种数据类型的函数!
SetLength(Dyna, length(dynarray1)
类型不匹配!
SetLength(Dyna, length(Dyna)
类型不匹配!
想要什么:
重载
DeleteElement(var Arr: TMultipleTypes, N: element)
:见上,为什么达不到这个目标。适用于数组中任何类型数据的单一
DeleteElement
实现?类似 <template> 类型的支持?