![]() |
Delphi-Coll unter XE2 oder neuer nutzen
Hallo,
ich benutze in einem Projekt von mir die Delphi-Collections, ( ![]()
Delphi-Quellcode:
Mit Delphi XE funktioniert das ganze so noch.
procedure TObjectDictionary<TKey, TValue>.HandleKeyRemoved(const AKey: TKey);
begin if FOwnsKeys then TObject(AKey).Free; // <-- E2089 Ungültige Typumwandlung end; Da es offensichtlich keine neuere Version gibt, frage ich mich nun, wie dieser Fehler behoben werden kann, um diese Library zu XE2/XE5 kompatibel zu machen. Womöglich ist es auch zielführender eine andere Collection-Library zu verwenden, welche noch aktiv gepflegt wird. Im Spring-Framework sind ebenfalls Collections vorhanden, jedoch keine MultiMaps wenn ich das richtig sehe. Was ich brauche, ist ein generisches TDictionary, welches mehrere Values pro Key verwalten kann. Dies kann (konnte) Delphi in der Vergangenheit leider nicht out-of-the-box. Hat jemand einen Ratschlag für mich? Grüße Stefan |
AW: Delphi-Coll unter XE2 oder neuer nutzen
Mit DelphiXE6 geht es ohne Probleme.
Es scheint aber doch eine neuer Version zu geben
Delphi-Quellcode:
procedure TObjectDictionary<TKey, TValue>.HandleKeyRemoved(const AKey: TKey);
begin if FOwnsKeys then PObject(@AKey)^.Free; end; |
AW: Delphi-Coll unter XE2 oder neuer nutzen
Damit man im Generic die Typen problemlos entsprechend casten kann, muß der Typ als "Object" gekennzeichnet sein.
Delphi-Quellcode:
type TObjectDictionary<TKey: class; TValue> = ...
oder
Delphi-Quellcode:
type TObjectDictionary<TKey: TMyClass; TValue> = ...
Ansonsten kommt der "doofe" Code-Parser vom Compiler damit nicht klar. Die andere Alternative ist leider, wie mkinzler schon zeigte, das brutale Umgehen der Typprüfung des Compilers. Delphi macht derartige Typprüfungen leider schon in der generischen Deklaration, und nicht erst in der Ableitung. |
AW: Delphi-Coll unter XE2 oder neuer nutzen
Besten Dank für Eure Antworten.
Es gibt tatsächlich eine neuere Version. Die habe ich ausgerechnet im Ursprungsbeitrag sogar verlinkt. Wenn man sich von der Website den MASTER-Branch holt, funktioniert es auch mit Delphi XE5. Tatsächlich wird aber auch in der Version nicht die Variante, welche himitsu vorgeschlagen hat umgesetzt, sondern die Typprüfung wird umgangen. Grüße Stefan |
AW: Delphi-Coll unter XE2 oder neuer nutzen
Ich würde dir empfehlen, Spring4D zu nutzen. Das wird aktiv entwickelt (Delphi-Coll ist faktisch tot - Alex macht daran nix mehr).
Delphi-Coll hat einige eher ausgefallenere Collection Types, die Spring4D (noch) nicht hat. Wenn dir dort etwas fehlen sollte, Feedback ist gern willkommen. |
AW: Delphi-Coll unter XE2 oder neuer nutzen
Hallo Stevie,
auch Dir Danke ich für Deine Antwort. Was die Collections betrifft, so hast Du ja einen ersten Vorschlag: "Multimaps". Fürs Erste muss ich erst einmal bei Delphi-Coll bleiben, aber ich werde den Aufwand für einen Umstieg demnächst mal genauer bewerten. Spring4d bzw. Dependency Injection im Allgemeinen ist ein Thema mit dem ich mich neben dem Berufsalltag zurzeit auseinandersetze. Diesbezüglich kommen sicher bald einige Fragen auf das Forum zu. Bei der Verwendung von DI fällt einem erst einmal so auf, was man sich in der Vergangenheit durch "suboptimale" Programmstukturierung verbaut hat. Beste Grüße Stefan |
AW: Delphi-Coll unter XE2 oder neuer nutzen
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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