Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#5

AW: TArray welches TPair<> enthält sortieren

  Alt 27. Sep 2022, 09:59
Nicht nur das. Es sind zwei verschiedene Typen.

System.Generics.Collections: TArray = class mit den Klassenmethoden<T>
System: TArray<T> = array of T; ohne irgendwas (Gut, ein Sortierungscode in System ist vielleicht zuviel, aber dann eben den Typen einfach in eine andere Unit, als TSortedArray<T> TManagedArray<T> mit Find/Exists/Sort/Pop/Push/Shift/Move/...)

Einen ClassHelper RecordHelper für Arrays funktioniert inzwischen,
aber nicht in der generischen Variante.
Delphi-Quellcode:
type
  TArrayHelper<T> = record helper for TArray<T> // [dcc32 Fehler] E2508 Typparameter sind bei diesem Typ nicht erlaubt
    procedure Sort;
  end;
Und das kompiliert zwar, geht aber auf den falschen Typen.
Delphi-Quellcode:
  TArrayHelper = class helper for TArray
    procedure Sort<T>;
  end;
Wenn du sowas haben willst, mußt du es also selber implementieren, für jeden einzelnen Typen.
Delphi-Quellcode:
type
  TByteArrayHelper = record helper for TArray<Byte>
    procedure Sort;
  end;

var
  A: TArray<Byte>;
begin
  A.Sort;
Und die Klassenvervollständigung kannst du auch vergessen, weil sie immernoch beim < abraucht.

Bestimmt kann man noch durch Vererbung oder einen Dummyklasse bissl gemeinsamen Code zentralisieren
und es über ein Code-LiveTemplate bereitstellen.



[add]
Oder ein Record, der sich wie ein Array verhält.

Wenn du noch bis zum Wochenende warten kannst ... ich bastle mir eh grade was, da das threadsave von Emba garnicht wirklich threadsave ist (seit jahren ignorierte Bugs und ich hab einen Anwendungsfall, wo sekündlich mehrere hundert Aktionen sicher nötig wären)
und das sonst passendende zwar ginge, aber von Haus aus nicht als thradsave implementiert ist.

(das was ich weglassen wollte, weil für mich nicht nicht nötig, wäre nicht der große Mehraufwand)
$2B or not $2B

Geändert von himitsu (27. Sep 2022 um 10:34 Uhr)
  Mit Zitat antworten Zitat