![]() |
Generics und Typparameter
Hallo zusammen.
Ich möchte mir eine generische Klasse für einen einfachen Ringspeicher schreiben. Dazu verwalte ich (genau wie
Delphi-Quellcode:
) die Elemente des Speichers in einem
TList<T>
Delphi-Quellcode:
. Das compiliert soweit ganz gut, bis ich die Add-Funktion implementieren will. Dann bekomme ich den Fehler:
array of T
Code:
Was soll mir das sagen und warum kann ich es nicht genau so machen wie bei TList. Hier mal der auf nötigste zusammengestrichene Code:
E2571 Typparameter 'T' hat keine Klassen- oder Interface-Einschränkung
Delphi-Quellcode:
Die Add-Methode einer einfachen Liste scheint aber genau so zu funktionieren. Also .. was tun? :cry:
type
TRing<T> = class(TEnumerable<T>) private FItems: array of T; {...} public procedure Add(const Value: T); {...} end; {...} procedure TRing<T>.Add(const Value: T); var Pos: Integer; begin Pos := (Current + 1) mod Size; FItems[Pos] := T; // <- hier meckert er end; |
AW: Generics und Typparameter
Ändere das T mal in Value ab:
Delphi-Quellcode:
FItems[Pos] := Value; // <- hier meckerte er
|
AW: Generics und Typparameter
grks, manchmal wird man einfach betriebsblind (wobei die Fehlermeldung nicht hilfreich war).
Danke Dir :oops: |
AW: Generics und Typparameter
So einen Ringspeicher habe ich gerade erst implementiert. Dabei habe ich für den Zugriff auf die Elemente zu Pointern gegriffen, so dass ich auch Records darin speichern und direkt darauf zugreifen kann.
// EDIT: Sprich:
Delphi-Quellcode:
TCircularBuffer<T> = class
public type TBufferPointer = ^T; strict private var FElements: TArray<T>; [...] public type TBufferEnumerator = class(TEnumerator<TCircularBuffer<T>.TBufferPointer>) [...] procedure Next; function GetEnumerator: TBufferEnumerator; property Current: TBufferPointer read GetCurrent; property Size: Integer read GetSize write SetSize; property Element[AIndex: Integer]: TBufferPointer read GetElement; default; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:22 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