Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Generische Variable vom Typ "Set"? (https://www.delphipraxis.net/182823-generische-variable-vom-typ-set.html)

Der schöne Günther 20. Nov 2014 10:18

Delphi-Version: XE5

Generische Variable vom Typ "Set"?
 
Delphi und seine Mengen. Manchmal echt cool.

Angenommen es ist
Delphi-Quellcode:
type
   TMyEnum = (korruption, schnecken, kekse);
   TMyEnumSet = set of TMyEnum;

Komme ich drum herum, mir eine eigentlich überflüssige Typdeklaration
Delphi-Quellcode:
TMyEnumSet
zu bauen? Mit Arrays kommt man ja auch um die Deklaration
Delphi-Quellcode:
TMyEnumArray = array of TMyEnum;
herum und kann stattdessen
Delphi-Quellcode:
TArray<TMyEnum>
schreiben.


Ich glaube, ich habe das schon mal gefragt. Aber ich finde nichts.

Uwe Raabe 20. Nov 2014 10:35

AW: Generische Variable vom Typ "Set"?
 
Gehen tut es definitiv nicht, aber das hast du sicher schon probiert.

Der Grund könnte darin liegen, daß sich ein Set immer auf einen Ordinaltyp mit begrenzter Kardinalität bezieht und dieser Constraint bei Generics nicht möglich ist,

Der schöne Günther 20. Nov 2014 10:42

AW: Generische Variable vom Typ "Set"?
 
Stimmt, die Begründung mach Sinn.

Gibt auch noch andere Einschränkungsmöglichkeiten für Generics die man sich wünschen könnte (Records). Hoffentlich wird das irgendwann mal was ;-)

himitsu 20. Nov 2014 10:49

AW: Generische Variable vom Typ "Set"?
 
Ja,
Delphi-Quellcode:
TMyEnumSet = set of (korruption, schnecken, kekse);
:roll:

ABER,
* der Namespace TMyEnumSet.korruption funktioniert nicht
* teilweise gibt es Probleme mit Serialisierungsfunktionen, welche den Enum-Typen haben wollen
* und man kann keine for-in-Schleife nutzen, weil man auch da den Enum-Typen benötigt
* Documentation Insigt schrottet dir das SET und macht ein Enum draus (
Delphi-Quellcode:
TMyEnumSet = (korruption, schnecken, kekse);
), weil es "ausversehn" das
Delphi-Quellcode:
set of
löscht. :wall: (aber DocInsight gibt es in XE7 eh nicht mehr :cry:)

Und nein, Array und SET sind zwei komplett unterschiedliche Dinge. :warn:
In ein Array könnte man auch locker
Delphi-Quellcode:
(korruption, korruption, korruption, kekse, korruption)
rein tun, da es eben eine "Liste von Enums" und kein "Set von Enum" ist.

Der schöne Günther 20. Nov 2014 10:54

AW: Generische Variable vom Typ "Set"?
 
Das ABER hat leider die VCL/RTL-Entwickler an manchen Stellen leider trotzdem nicht davon abgehalten :-(


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz