Bug oder Feature?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Warf
Beiträge: 1479
Registriert: Di 23. Sep 2014, 17:46
OS, Lazarus, FPC: MacOS | Win 10 | Linux
CPU-Target: x86_64
Wohnort: Aachen

Bug oder Feature?

Beitrag von Warf »

Hey, ich bin grade dabei eine eigene Generische Listenimplementation zu bauen mit Focus auf Performance und habe etwas gefunden das m.E. nach eigentlich gehen sollte, aber nen Syntaxfehler wirft:

Code: Alles auswählen

generic TBitCompare<T> = class
class function equals(const A: T; const B: T): Boolean; inline;
class function Compare(const A: T; const B: T): Integer; inline;
end;
 
generic TFGList<T, Comparator> = class
[...]
end;
 
generic TFGDefaultList<T> = class(specialize TFGList<T, specialize TBitCompare<T>>);


Die Idee ist simpel, statt nem Funktionspointer zu übergeben, für den Comparator, wollte ich eine Generische Klasse verwenden, mit Statischen Methdoen, die nach dem Inlineing komplett wegoptimiert werden sollte (im Vergleich dazu, ein Funktionspointer muss immer den Jump ausführen, was natürlich mehrere Operationen bedeutet). Da ich für den Standardfall gerne eine Klasse anbieten möchte die den Comparator bereits gesetzt hat mit einem Standard Bitwise Compare, wollte ich also die TFGDefaultList definieren, die die TBitCompare Klasse für den Übergebenen Typen verwendet.

Anscheinend geht Specialize in einem anderen Specialize nicht. Da wollte ich mal fragen ob einer von euch vielleicht weiß ob das so gewollt ist, oder ob das eventuell sogar ein Bug ist, und eigentlich gehen sollte

Antworten