работать правильно?
generic TArrayHelper<T> = class
class procedure DeleteElement(var Arr: T; Index: Integer);
end;
class procedure TArrayHelper.DeleteElement(var Arr: T; Index: Integer);
var
Last: Integer;
begin
Last := High(Arr);
if (Index < 0) or (Index > Last) then Exit; // Error handling for invalid index
if Index < Last then
Move(Arr[Index + 1], Arr[Index], (Last - Index) * SizeOf(T));
SetLength(Arr, Last);
end;
в fpc должен, если специализуешь динмассивом. в делфи нет
спсб, а то уж больно симпатичный код получается, если так можно. Не хочется на вложенные классы лепить практически идентичные методы
ты объяви нужный тип внутри и юзай его type generic TArrayHelper<T> = class type TMyArray=array of T; class procedure DeleteElement(var Arr: TMyArray; Index: Integer); end;
синтаксис специфичен для fpc.. делфи-то тут причём?
фокус не получится, нужно будет делать приведение типов
это пожалуй единственное принципиальное различие - то что можно в фпц нельзя в делфи
пробовал? или предпологаешь?
ты ж на делфи не писал никогда.. зачем в обсуждение кода на fpc притягивать делфи?
1) тут будет мемлик в случае, если элементы массива автотипы типа строки или интерфейса 2) для удаления элемента массива есть готовая функция delete
для удаления элемента массива класса существует стандартная функция удаления? Можно узнать где она зарыта в дженерике?
https://docwiki.embarcadero.com/Libraries/Alexandria/en/System.Delete
program Project1; {$mode delphi} type TArrayHelper<T> = class type TMyArray=array of T; class procedure DeleteElement(var Arr: TMyArray; Index: Integer); end; type ArrayHelper=TArrayHelper<char>; myArray=array of char; var ma:myArray; class procedure TArrayHelper<T>.DeleteElement(var Arr: TMyArray; Index: Integer); begin end; begin ArrayHelper.DeleteElement(ma,1); end.
а вообще - юзай gvector из fcl-stl
Обсуждают сегодня