Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Enum-Typen ausfindig machen? (https://www.delphipraxis.net/193653-enum-typen-ausfindig-machen.html)

Glados 26. Aug 2017 00:02

Enum-Typen ausfindig machen?
 
Ich habe mal wieder ein Problem mit Enums.

Gegeben
Delphi-Quellcode:
type
 TTestEnum = (ttA, ttB, ttC);

function TMainForm.TestFunc<T>(Param1: string);
begin

end;

TestFunc<TTestEnum>('blub');
Ich würde nun gerne prüfen können, vom welchen Typ T ist. Ist nicht etwas möglich wie.. ?
Delphi-Quellcode:
if T = TTestEnum then
 ...

Zacherl 26. Aug 2017 00:56

AW: Enum-Typen ausfindig machen?
 
Der
Delphi-Quellcode:
is
Operator sollte mitlerweile glaube ich hierfür funktionieren. Ansonsten gibt es noch die Möglichkeit über
Delphi-Quellcode:
TypeInfo(T) = TypeInfo(TMyEnum)


Siehe auch:
http://delphisorcery.blogspot.de/201...re-in-xe7.html

Der schöne Günther 26. Aug 2017 07:40

AW: Enum-Typen ausfindig machen?
 
Kleiner Design-Hinweis: Wenn du zur Laufzeit wieder aufdröseln musst von welchem Typ denn nun T ist um darauf zu reagieren, dann ist die Methode eigentlich nicht mehr generisch. Vielleicht kann man da das Design nochmal überdenken. Das ist ähnlich als würde man in der Methode einer Oberklasse TAnimal noch einmal zur Laufzeit schauen ob man selbst nun ein TDog oder ein TFrog oder sonstwas ist...

Glados 26. Aug 2017 10:01

AW: Enum-Typen ausfindig machen?
 
Meine Methode sieht wie gesagt so aus und kann mehrere Typen annehmen
Delphi-Quellcode:
function TMainForm.TestFunc<T>(Param1: string);
Die Methode hat in etwa 70 Zeilen. Insgesamt habe ich drei verschiedene Typen.

Um die Methode nicht dreimal zu schreiben dachte ich, ist <T> ein guter Ansatz.

Glados 26. Aug 2017 17:43

AW: Enum-Typen ausfindig machen?
 
Ich habe das jetzt anders geregelt.
Statt einen Enum so zu übergeben
Delphi-Quellcode:
function TMainForm.TestFunc<T>(Param1: string);
, übergebe ich jetzt ein
Delphi-Quellcode:
Set of <ein anderes enum>
als normalen Parameter.
In TestFunc prüfe ich dann einfach
Delphi-Quellcode:
if TEnum.Irgendwas in EnumSet then
.

So umgehe ich TypeInfo und das "absolut-nicht-generisch"-Problem.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:25 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