Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

Typen in Methoden erzeugen keine RTTI

  Alt 21. Mai 2011, 16:28
Delphi-Version: XE
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:
  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;
Wenn ich das Compilieren will, meldet der Compiler mir folgende Meldung:
Code:
[DCC Fehler] EnumTypeInfoTest.dpr(50): E2134 Typ 'TProcedureEnum' besitzt keine Typinformation
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.

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? Ich bin recht schnell darauf gekommen, da mein Code die Typeinformationen abfrage und entsprechend agiert.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)

Geändert von s.h.a.r.k (21. Mai 2011 um 16:31 Uhr)
  Mit Zitat antworten Zitat