Задать вопрос
@smigles

Как объединить процедуры с одинаковым кодом в Delphi?

Есть две процедуры в Delphi:
procedure procInt(var arr: array of integer);
var
  p: integer;

begin
  ...
end;

procedure procStr(var arr: array of string);
var
  p: string;

begin
  ...
end;

Процедуры имеют абсолютно одинаковый код внутри блока begin ... end;. Различаются они только типом данных у параметра-массива arr и у объявляемой переменной p.

Можно ли как-то объединить эти две процедуры, чтобы не писать один и тот же код?
  • Вопрос задан
  • 281 просмотр
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
@kalapanga
Например так:
type
  TArrayHelper<T> = class
    class procedure CoolProc(var arr: TArray<T>); // Ваша процедура
  end;

…

implementation

class procedure TArrayHelper<T>.CoolProc(var arr: TArray<T>); // Реализация Вашей процедуры
var
  Tmp: T;
begin
    Tmp := arr[0];
    arr[0] := arr[4];
    arr[4] := Tmp;
end;

procedure TForm1.Button1Click(Sender: TObject); // Проверка работы
var
  i: integer;
  iarr: TArray<Integer>;
  sarr: TArray<String>;
begin
  iarr := TArray<Integer>.Create(1, 2, 3, 4, 5);
  sarr := TArray<String>.Create('one', 'two', 'three', 'four', 'five');
  TArrayHelper<Integer>.CoolProc(iarr); // Вызов для целых чисел
  TArrayHelper<String>.CoolProc(sarr); // Вызов для строк
  for I := 0 to 4 do
  begin
    memo1.Lines.Add(IntToStr(iarr[i]));
    memo2.Lines.Add(sarr[i]);
  end;
end;
Ответ написан
AndyKorg
@AndyKorg
Кнопконажиматель и припоерасплавлятель
procedure procIntOrStr(var arr: array of integer); overload;
procedure procIntOrStr(var arr: array of string); overload;
Ответ написан
@xDimus
Как вариант можно оставить одну процедуру например str, а перед вызовом преобразовывать массив int в массив str.
А что у вас делает
абсолютно одинаковый код внутри блока
?
Ответ написан
@microfrog
procedure procVar(var arr: array of Variant);

Внутри определять конкретный тип переменных в массиве и производить над ними нужные действия.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы