![]() |
Delphi-Version: XE
Typen in Methoden erzeugen keine RTTI
Manchmal frage ich mich echt, was sich die Entwickler des Compilers gedacht haben... Ich bin gerade durch Zufall auf ein eher komisches "Problem" gestoßen -- vielleicht sehe auch nur ich das als Problem an. Im einfachsten Fall sieht das jedenfalls so aus:
Delphi-Quellcode:
Wenn ich das Compilieren will, meldet der Compiler mir folgende Meldung:
procedure PrintEnumTypeName();
type TProcedureEnum = (peOne, peTwo, peThree); TProcedureEnums = set of TProcedureEnum; var TI : PTypeInfo; begin TI := TypeInfo(TProcedureEnum); if (TI <> nil) then Writeln(TI^.Name); end;
Code:
Okay, kann man wahrlich anders schreiben, aber WOZU? Ich brauche diesen Typen hier nur temporär in dieser einen Methode. Wenn ich Typen innerhalb von Klassen oder Records definiere sind Typeinformationen vorhanden, nur hier nicht. Kennt jemand vielleicht den Grund dafür? Ich kann mir das auf Anhieb nicht so wirklich erklären.
[DCC Fehler] EnumTypeInfoTest.dpr(50): E2134 Typ 'TProcedureEnum' besitzt keine Typinformation
Lustig wird das ganze aber dann, wenn man dieses Problem mit Generics kombiniert, denn dann erscheint zur Compilezeit keine Fehlermeldung, sondern nur zur Laufzeit. Und da dann zu merken, woher der Wind pfeift? :gruebel: Ich bin recht schnell darauf gekommen, da mein Code die Typeinformationen abfrage und entsprechend agiert. |
AW: Typen in Methoden erzeugen keine RTTI
Setzte mal testweise den Compilerschalter
Delphi-Quellcode:
. So müssten eigentlich Typ-Informationen für zumindest die nachfolgende Typendeklaration erzeugt werden.
{$M+}
Bernhard |
AW: Typen in Methoden erzeugen keine RTTI
Nein, leider nicht. Ich habe es mal nur um die beiden Typen gesetzt, dann um die Procedure und dann mal ganz an den Anfang des Projekts, immer die gleiche Meldung.
Mir persönlich macht das eigentlich auch wenig, ich würde nur gerne den Grund wissen, in so fern jemand diesen kennt oder sich vorstellen kann, warum es so ist, wie es ist. Ich komme glaub selten bis nie in die Versuchung so zu programmieren :) |
AW: Typen in Methoden erzeugen keine RTTI
Ich denke, es handelt sich an der Stelle eher um ein Enum spezifisches Problem. Trags mal in QC ein. Wenn du nämlich ne lokale Record Definition z.B. hast geht das.
Was sie sich dabei gedacht haben? Eventuell solltest du das mal Barry Kelly fragen, er kann dir bestimmt Gründe für die eine oder andere Designentscheidung nennen. |
AW: Typen in Methoden erzeugen keine RTTI
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:20 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 by Thomas Breitkreuz