![]() |
Feature Announcement: generische Funktionen, Prozeduren und Methoden
Hallo zusammen!
[Übersetzung meines englischen ![]() Es freut mich endlich bekannt geben zu können, dass Free Pascal nun generische Funktionen, Prozeduren und Methoden (zusammengefasst "Routinen") unterstützt, wodurch es möglich wird typsichere Routinen zu schreiben, die für mehrere Typen verwendet werden können. Syntax: Die Syntax zum Deklarieren einer generischen Routine gleicht der für normale Routinen und beinhaltet auch die Unterstützung für Klassenmethoden:
Delphi-Quellcode:
Für die TYPEARGLIST gelten die gleichen Regeln wie für generische Typen. Typparameter, die in der TYPEARGLIST deklariert sind können in der PARAMETERLIST, dem RESULTTYPE und natürlich dem Routinenkörper verwendet werden.generic [class] (procedure|function) IDENTIFIER<TYPEARGLIST>[(PARAMETERLIST)][: RESULTTYPE]; MODIFIERS; Generische Routinen können sowohl durch die TYPEARGLIST, als auch durch die PARAMETERLIST überladen werden. Um eine generische Routine aufzurufen wird die folgende Syntax verwendet:
Delphi-Quellcode:
Für die TYPELIST gelten die gleichen Regeln wie beim Spezialisieren eines generischen Typen.specialize IDENTIFIER<TYPELIST>[(PARAMETERS)] Falls die Routine Teil eines Typs oder einer Variable ist oder ein Unitname zum Zweck der Eindeutigkeit verwendet wird, dann muss dieser Teil vor dem
Delphi-Quellcode:
kommen:
specialize
Delphi-Quellcode:
Aufrufe von generischen Routinen sind normale Faktoren, wodurch sie auch als solche genutzt werden können, wie das folgende Beispiel zeigt:
TYPENAME.specialize IDENTIFIER<TYPELIST>[(PARAMETERS)]
VARIABLE.specialize IDENTIFIER<TYPELIST>[(PARAMETERS)] UNITNAME.specialize IDENTIFIER<TYPELIST>[(PARAMETERS)]
Delphi-Quellcode:
Delphikompatibilität:
{$mode objfpc}
generic function Add<T>(aLeft, aRight: T): T; begin Result := aLeft + aRight; end; begin Writeln(specialize Add<String>('Generic ', 'routines') + specialize Add<String>(' with ', 'Free Pascal')); end. Natürlich ist dieses Feature für die Delphi modes auch delphikompatibel implementiert. Dort ist die Syntax zum Deklararien einer generischen Routine wie folgt:
Delphi-Quellcode:
Es fehlt also nur das [class] (procedure|function) IDENTIFIER<TYPELIST>[(PARAMETERLIST)][: RETURNTYPE]; MODIFIERS;
Delphi-Quellcode:
Schlüsselwort. Dies ist analog beim Aufruf einer generischen Routine:
generic
Delphi-Quellcode:
Auf Grund des fehlenden IDENTIFIER<TYPELIST>[(PARAMETERS)]
Delphi-Quellcode:
Schlüsselwortes das Spezialisierungen markiert funktionieren komplexe Ausdrücke noch nicht in den Delphi Modi. Das heißt, dass die Zuweisung von Rückgabewerten okay ist, aber mit mehr als das ist es sehr möglich auf Compilerfehler zu stoßen.
specialize
Bitte beachtet, dass im Gegensatz zu Delphi von uns globale generische Funktionen/Prozeduren auch im Delphi Modus unterstützt werden. Einschränkungen/ToDos: Dieses Feature ist noch nicht vollständig and es gibt einige Einschränkungen, die noch überwunden werden müssen oder Teile die noch nicht funktionieren. Dies beinhaltet, ist aber nicht beschränkt auf:
Bitte testet dieses Feature and meldet alle Probleme im ![]() Schöne Grüße, Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz