gpt4 book ai didi

delphi - 为什么编译器拒绝二维泛型数组的声明?

转载 作者:行者123 更新时间:2023-12-03 14:53:05 25 4
gpt4 key购买 nike

我想声明一个这样的类型:

type
TDynMatrix<T> = TArray<TArray<T>>;

编译器拒绝此行为:

[dcc32 Error] E2508 Type parameters not allowed on this type

I wondered whether the issue was related to the nesting of generics. But it seems not:

type
TDynArray<T> = TArray<T>;//pointless type I know, but for the sake of the Q

也会导致相同的编译器错误。

documentation因为编译器错误让我知道的可能比我阅读之前所知道的还要少:

E2508 type parameters not allowed on this type (Delphi)

When using class references, you cannot use generic classes directly. You need to use a wrapper class to be able to use generics.

program E2508;

{$APPTYPE CONSOLE}

uses
SysUtils;

type
TMyClass = class
end;
TMyClassClass<T> = class of TMyClass;

begin
Writeln('FAIL - E2508 type parameters not allowed on this type');
end.

谁能解释一下为什么我不能以这种方式声明泛型类型?

最佳答案

您的代码无效,因为您无法将泛型类型重新声明为开放泛型类型。

我将其声明为:

type
TDynMatrix<T> = array of TArray<T>;

这样,您仍然具有可能需要的兼容性:一维元素到 TArray<T> .

那么你就可以写了

var
matrix: TDynMatrix<Integer>;
values: TArray<Integer>;
....
SetLength(matrix, 2, 2);
values := matrix[0];
values := Copy(matrix[1]);

等等。

关于delphi - 为什么编译器拒绝二维泛型数组的声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21890617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com