Taki kod popełniony z nudów:
{$MODE DELPHI}
{$H+}
Type TIntArray = Array of Integer;
Type GArray<T> = Class
Type TArray = Array of T;
Class procedure Delete(var Arr: TArray; const Index: LongWord);
End;
Class procedure GArray<T>.Delete(var Arr: T; const Index: LongWord);
Var I: LongWord;
Begin
For I := Index To High(Arr)-1 Do
Arr[I] := Arr[I+1];
SetLength(Arr, High(Arr));
End;
Procedure Display(A: TIntArray);
Var I: Byte;
Begin
For I := Low(A) To High(A) Do
Writeln('[', I, '] = ', A[I]);
Writeln;
End;
Var A: TIntArray;
I: Byte;
Begin
SetLength(A, 10);
For I := Low(A) To High(A) Do
A[I] := I;
Display(A);
GArray<Integer>.Delete(A, 5);
Display(A);
Readln;
End.
Mamy generyczną klasę GArray
która posiada metodę Delete
usuwającą z tablicy dynamicznej wartość znajdującą się pod danym indeksem.
W związku z tym, iż metoda ta oznaczona jest jako class procedure
, nie potrzeba konstruktora klasy, by móc ją wywołać.
Nie ma potrzeby nawet tworzenia zmiennej, bo mamy od tego konstrukcję która tworzy ją i usuwa "w locie":
GArray<podstawowy typ tablicy>.Delete(tablica, indeks);
(nie działa w trybie objfpc).
Może komuś się przyda, lecz zostawiam bardziej jako ciekawostkę; testowane pod FPC 2.6.0 :P
(uwaga: klasa działa jedynie na tablicach 1D, a indeks nie może być mniejszy od zera)