Funktionen zu specialized class hinzufügen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Knittel
Beiträge: 12
Registriert: Sa 26. Mär 2016, 14:43

Funktionen zu specialized class hinzufügen

Beitrag von Knittel »

Hallo allerseits,

ich benutze Generics (unit fgl) um mir eine spezialisierte Liste zu erstellen:

Code: Alles auswählen

type TPuzItem = class
   [...]
   property Value: integer read FValue;
   [...]
   end;
type TPuzItemList = specialize TFPGObjectList<TPuzItem>; 

Und würde jetzt gerne weitere Funktionen zu TPuzItemList hinzufügen (nicht zu TFPGObjectList). Jetzt ist die Frage, wie mache ich das?
In der Freepascal Wiki habe ich leider nichts entsprechendes gefunden.
Damit ihr euch vielleicht etwas mehr darunter vorstellen könnt, ich hatte mir vorgestellt zu TPuzItemList eine Funktion hinzuzufügen, die die Liste
nach Werten filtert.

Code: Alles auswählen

procedure TPuzItemList.FilterByValue(AMin, AMax: integer);
var i: integer;
begin
for i := Count-1 downto 0 do
  if (Items[i].Value < AMin) or (Items[i].Value > AMax) then
    Delete(i);
end;

So sähe aber ja nur der Implementierungsteil aus. Wie sieht das aber im Interface-Bereich der Unit aus?

Vielen Dank schonmal im Vorraus!

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2640
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Funktionen zu specialized class hinzufügen

Beitrag von m.fuchs »

Indem du von der spezialisierten Klasse ableitest:

Code: Alles auswählen

type
  TCustomSpecializedList = specialize TFPGObjectList<TObject>;
 
  TSpecializedList = class(TCustomSpecializedList)
    public
      procedure Test;
  end;

Oder in kurzer Version:

Code: Alles auswählen

type
  TSpecializedList = class(specialize TFPGObjectList<TObject>)
    public
      procedure Test;
  end;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Knittel
Beiträge: 12
Registriert: Sa 26. Mär 2016, 14:43

Re: Funktionen zu specialized class hinzufügen

Beitrag von Knittel »

Vielen Dank! Funktioniert genauso wie ich mir das vorgestellt habe. :)

Hatte das bisher nicht ausprobiert, weil hier (http://wiki.freepascal.org/Generics_proposals#Sanity_checks) stand "Specialized types cannot be derived from". Oder ist damit was anderes gemeint, weil wenn nicht könnte man hier die Wiki mal anpassen?

EDIT: Mir ist grad aufgefallen, dass das nur proposals sind. Kommt davon wenn man den Text nur überfliegt^^. Hat sich damit erledigt. Danke nochmal.

Antworten