AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Typen in Methoden erzeugen keine RTTI

Ein Thema von s.h.a.r.k · begonnen am 21. Mai 2011 · letzter Beitrag vom 22. Mai 2011
Antwort Antwort
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
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#2

AW: Typen in Methoden erzeugen keine RTTI

  Alt 21. Mai 2011, 17:39
Setzte mal testweise den Compilerschalter {$M+} . So müssten eigentlich Typ-Informationen für zumindest die nachfolgende Typendeklaration erzeugt werden.

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

AW: Typen in Methoden erzeugen keine RTTI

  Alt 21. Mai 2011, 17:44
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
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.008 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#4

AW: Typen in Methoden erzeugen keine RTTI

  Alt 21. Mai 2011, 18:02
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.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
USchuster

Registriert seit: 12. Sep 2010
Ort: L.E.
120 Beiträge
 
Delphi XE3 Professional
 
#5

AW: Typen in Methoden erzeugen keine RTTI

  Alt 22. Mai 2011, 11:06
Ich denke, es handelt sich an der Stelle eher um ein Enum spezifisches Problem. Trags mal in QC ein.
Ja, bitte und dann hier die Nummer posten.

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.
Barry ist bei Stack Overflow sehr aktiv und da könnte er die gleiche Frage posten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:22 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