将非类函数添加到通用TArray类中

问题描述 投票:-1回答:1

System.Generics.Collections中,TArray类型仅具有类功能。

例如:

class procedure Sort<T>(var Values: array of T); overload; static;

这意味着唯一接受的语法如下:

var
  Arr : TArray<integer>;
begin
  SetLength(Arr, 2);
  Arr[0] := 5;
  Arr[1] := 3;

  TArray.Sort<integer>(Arr);
end;

我想定义一个对象的函数,以便使用以下语法对通用数组的值进行排序:

var
  Arr : TArray<integer>;
begin
  SetLength(Arr, 2);
  Arr[0] := 5;
  Arr[1] := 3;

  Arr.Sort();
end;
delphi delphi-xe7 generic-collections
1个回答
0
投票

您可以为非通用动态数组或完全专用的通用动态数组定义帮助器。例如,您可以编写:

type
  TMyArray1 = array of Integer;
  TMyArray2 = TArray<Integer>;

  TMyArrayHelper1 = record helper for TMyArray1
  end;
  TMyArrayHelper2 = record helper for TMyArray2
  end;
  TMyArrayHelper3 = record helper for TArray<Integer>
  end;

这使您可以将方法添加到此类数组的范围。

但是,您不能做的是写:

  TMyArrayHelper<T> = record helper for TArray<T>
  end;

编译器根本不支持通用帮助器。

我认为这些都不值得,只需致电:

TArray.Sort<T>()

直接。

© www.soinside.com 2019 - 2024. All rights reserved.