![]() |
Enum-Typen ausfindig machen?
Ich habe mal wieder ein Problem mit Enums.
Gegeben
Delphi-Quellcode:
Ich würde nun gerne prüfen können, vom welchen Typ T ist. Ist nicht etwas möglich wie.. ?
type
TTestEnum = (ttA, ttB, ttC); function TMainForm.TestFunc<T>(Param1: string); begin end; TestFunc<TTestEnum>('blub');
Delphi-Quellcode:
if T = TTestEnum then
... |
AW: Enum-Typen ausfindig machen?
Der
Delphi-Quellcode:
Operator sollte mitlerweile glaube ich hierfür funktionieren. Ansonsten gibt es noch die Möglichkeit über
is
Delphi-Quellcode:
TypeInfo(T) = TypeInfo(TMyEnum)
Siehe auch: ![]() |
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...
|
AW: Enum-Typen ausfindig machen?
Meine Methode sieht wie gesagt so aus und kann mehrere Typen annehmen
Delphi-Quellcode:
Die Methode hat in etwa 70 Zeilen. Insgesamt habe ich drei verschiedene Typen.
function TMainForm.TestFunc<T>(Param1: string);
Um die Methode nicht dreimal zu schreiben dachte ich, ist <T> ein guter Ansatz. |
AW: Enum-Typen ausfindig machen?
Ich habe das jetzt anders geregelt.
Statt einen Enum so zu übergeben
Delphi-Quellcode:
, übergebe ich jetzt ein
function TMainForm.TestFunc<T>(Param1: string);
Delphi-Quellcode:
als normalen Parameter.
Set of <ein anderes enum>
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 08:02 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