Ich möchte eine Art, so erklären:Warum lehnt der Compiler die Deklaration eines generischen 2D-Arrays ab?
diesetype
TDynMatrix<T> = TArray<TArray<T>>;
Der Compiler weist mit:
[dcc32 Error] E2508 Type parameters not allowed on this type
Ich fragte mich, ob das Problem auf die Verschachtelung von Generika verbunden war. Aber es scheint nicht:
type
TDynArray<T> = TArray<T>;//pointless type I know, but for the sake of the Q
führt auch zu den gleichen Compiler-Fehler.
Der documentation für den Compiler-Fehler hat mich vielleicht noch weniger wissen, als ich wusste, bevor ich es lesen:
E2508 Typparameter auf diese Art nicht erlaubt (Delphi)
Wenn-Klasse Verweise können Sie nicht direkt generische Klassen verwenden. Sie müssen eine Wrapper-Klasse verwenden, um Generika verwenden zu können.
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.
Kann mir jemand erklären, warum ich nicht generische Typen auf diese Weise erklären können?
Sieht für mich wie ein Fehler aus. –
'TDynMatrix = Array von Array von T;' kompiliert. –
@LURD Ja, aber dann bin ich durch Oldschool-Zuweisungskompatibilität eingeschränkt. Der Vorteil von 'TArray <> ist, dass Sie dieser besonderen Tyrannei entkommen. –