AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi [RTTI] Unterstützung von Attributen für Enumeration-Werte
Thema durchsuchen
Ansicht
Themen-Optionen

[RTTI] Unterstützung von Attributen für Enumeration-Werte

Ein Thema von s.h.a.r.k · begonnen am 29. Mär 2012 · letzter Beitrag vom 30. Mär 2012
Antwort Antwort
Benutzerbild von s.h.a.r.k
s.h.a.r.k

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

[RTTI] Unterstützung von Attributen für Enumeration-Werte

  Alt 29. Mär 2012, 22:48
Delphi-Version: XE2
Guten Abend,

habe heute in VB.Net eine Klasse geschrieben, die mir einen Enum-Wert in einen String umwandelt und dabei prüft, ob der Enum-Wert ein String-Repräsentatins-Attribut hat. In so fern dieses Attribut vorhanden ist, so wird die angegebene String-Representation des Enum-Wertes ausgegeben, sonst direkt EnumValue.ToString() aufgerufen. Folgendes soll zeigen, was ich mein:
Delphi-Quellcode:
MyEnum = (
  [StringRepresentation('Test')]
  meOne,
  [StringRepresentation('Welcome!')]
  meTwo,
  meThree
);

Writeln( EnumToString<MyEnum>(meOne) ); // Liefert: Test
Writeln( EnumToString<MyEnum>(meTwo) ); // Liefert: Welcome!
Writeln( EnumToString<MyEnum>(meThree) ); // Liefert: meThree
Hey, jetzt dachte ich mir, ich code das mal in Delphi nach, da das sicherlich praktisch ist, aber Fehlanzeige. Habe bisher leider keine Möglichkeit gefunden dies umzusetzen. Stattdessen habe ich ein paar Threads in der Form von dem hier gefunden. Nun ists aber so, dass in der Zwischenzeit Delphi XE und XE2 raus gekommen sind und dieses Feature evtl. nachgeliefert wurde. Wollte daher mal nachfragen, ob dahingehend jemand weiß, ob ja oder nein?!

PS: Nein, ich bin definitiv nicht auf der Suche nach einer alternativen Lösung!
»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.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#2

AW: [RTTI] Unterstützung von Attributen für Enumeration-Werte

  Alt 30. Mär 2012, 09:49
Nein, gibt's nicht.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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: [RTTI] Unterstützung von Attributen für Enumeration-Werte

  Alt 30. Mär 2012, 10:50
*Grml* Sowas nervt mich dann doch wieder etwas... Warum eigentlich nicht? Die Exe ist doch eh schon ausreichend groß. Ein MB mehr oder weniger würde dann doch auch keine Rolle mehr spielen. Irgendwie inkonsequent alles... Schade drum...

Danke jedenfalls für die Antwort
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#4

AW: [RTTI] Unterstützung von Attributen für Enumeration-Werte

  Alt 30. Mär 2012, 11:21
Wo ist denn dein EnumToString eigentlich her?

Aber am Ende geht das bestimmt auch nur auf Delphi-Referenz durchsuchenTypInfo.GetEnumName.
Und dieses schaut in die RTTI, wo es direkt eine Tabelle mit den Namen ausliest
und nicht auch noch nach irgendwelchen Attributen schaut.

Aber im Notfall kannst'e dir das ja noch mit in dein EnumToStr einbauen.


PS: Wo ich immer wieder das Kotzen bekomm, ist sowas.
Zitat von Unit RTTI:
Delphi-Quellcode:
  TRttiEnumerationType = class(TRttiOrdinalType)
  private
    ...
    class function GetName<T{: enum}>(AValue: T): string; reintroduce; static;
Eigentlich eine schöne Funktion, aber wer erkennt den Haken?


OK, du könntest die RTTI manuell umschreiben (diese Tabelle läßt sich ersetzen/überschreiben), aber schön wird das nicht.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (30. Mär 2012 um 11:23 Uhr)
  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
 
#5

AW: [RTTI] Unterstützung von Attributen für Enumeration-Werte

  Alt 30. Mär 2012, 11:41
EnumToString ist eine imaginäre Methode. Ich habe mir schon einen generischen Enum-Helper geschrieben, der, soweit ich das noch weiß, auf GetEnumName aus der TypInfo basiert. Aber ich hätte diese Methode sehr gerne um die besagte Funktionalität erweitert. Daher habe ich keinen Code dazu gepostet, sondern nur die Idee skizziert.

Und das mit dem selbst dazu coden will ich eher weniger. Zum einen muss ich zugeben, dass ich mich bei sowas nicht sonderlich gut auskenne und zum anderen mag ich manche "Hacks" nicht unbedingt. Nutze dann doch ganz gerne die Standardfunktionalitäten Und da scheint es leider keinen direkten Weg zu geben.

Wo soll bei der Methode der Haken liegen?
»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.016 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: [RTTI] Unterstützung von Attributen für Enumeration-Werte

  Alt 30. Mär 2012, 12:08
Dass es keinen Type constraint auf enum gibt (durch den inline comment angedeutet) und das Ding bei T von einem Nicht Enum Type auseinander fliegt.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  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
 
#7

AW: [RTTI] Unterstützung von Attributen für Enumeration-Werte

  Alt 30. Mär 2012, 12:28
Dass es keinen Type constraint auf enum gibt (durch den inline comment angedeutet) und das Ding bei T von einem Nicht Enum Type auseinander fliegt.
Jo, klar. Es wird eine Exception geworfen, aber immerhin eine sinnvolle Bleibt dann mal zu hoffen, dass sprachlich einfach mal nachgebessert wird.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  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:00 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