AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Generics in Attributen?

Offene Frage von "himitsu"
Ein Thema von Der schöne Günther · begonnen am 23. Apr 2014 · letzter Beitrag vom 24. Apr 2014
Antwort Antwort
Seite 1 von 2  1 2   
Der schöne Günther

Registriert seit: 6. Mär 2013
6.172 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Generics in Attributen?

  Alt 23. Apr 2014, 18:37
Delphi-Version: XE5
Folgendes

Delphi-Quellcode:
   MyAttribute<T> = class(TCustomAttribute)
      protected var someValue: T;
      public constructor Create(const someValue: T);
   end;


   TMyTaggedClass = class
      protected var
         [MyAttribute<Integer>(123)]
         someVariable: String;
   end;
liefert
Code:
[dcc32 Warnung] Project2.dpr(25): W1025 Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut'

Stelle ich mich zu dumm an oder kann ich die Idee vergessen? Ich wollte ein paar Feldern ein Art Default-Wert mitgeben. Und ich wollte vermeiden, für jeden möglichen Typ ein eigenes Attribut basteln zu müssen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Generics in Attributen?

  Alt 23. Apr 2014, 18:44
Da kommt einfach irgendwas mit dem < und > im Typnamen nicht klar.
Dieses Problem ist auch bei anderen Dingen vertreten, wie z.B. publisched Felder in der DFM und, ich glaub, das DataSnap muckte da auch etwas rum.

Delphi-Quellcode:
type
   MyGenericAttribute<T> = class(TCustomAttribute)
      protected var someValue: T;
      public constructor Create(const someValue: T);
   end;
   MyIntegerAttribute = class(MyGenericAttribute<Integer>);
   MyStringAttribute = class(MyGenericAttribute<String>);

   TMyTaggedClass = class
      protected var
         [MyIntegerAttribute(123)]
         someVariable: String;
   end;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Apr 2014 um 18:47 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Generics in Attributen?

  Alt 23. Apr 2014, 18:55
Das liegt evtl. auch an der automatischen Suffexierung der Delphi-Attribute mit "attribute". Dein Beispiel sollte ja auch mit My(123) gültig sein.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.172 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Generics in Attributen?

  Alt 23. Apr 2014, 18:57
Stimmt, das könnte wirklich daran liegen...
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.472 Beiträge
 
Delphi 12 Athens
 
#5

AW: Generics in Attributen?

  Alt 23. Apr 2014, 21:25
Guckst du hier: E2565 Parametrisierter oder instantiierter Typ kann nicht als benutzerdefiniertes Attribut verwendet werden(Delphi)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Generics in Attributen?

  Alt 23. Apr 2014, 22:04
Zitat:
Dieser Fehler tritt bei dem Versuch auf, RTTI-Informationen von einem generischen Typ abzuleiten.
Ableiten?


Das, was die da machen, ist einen Alias zu verwenden, aber der Compiler ersetzt diesen sofort wieder durch den eigentlichen Typ, womit der Code dem des TEs entspricht.

"Richtig" ableiten, siehe mein Beispiel.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.472 Beiträge
 
Delphi 12 Athens
 
#7

AW: Generics in Attributen?

  Alt 23. Apr 2014, 22:27
Zitat:
Dieser Fehler tritt bei dem Versuch auf, RTTI-Informationen von einem generischen Typ abzuleiten.
Ableiten?


Das, was die da machen, ist einen Alias zu verwenden, aber der Compiler ersetzt diesen sofort wieder durch den eigentlichen Typ, womit der Code dem des TEs entspricht.
Das Beispiel in der Fehlerbeschreibung zeigt exakt eben genau das was Günther versucht hat. Allein duch den Alias-Typen kommt man aber erst zu dieser Fehlermeldung, die einfach nur besagt, daß sowas nicht geht.

Das "ableiten", das du in deinem Quote bemängelst, hat hier wohl eher die Bedeutung von "herleiten" im Sinne von Informationen ermitteln. Der Englische Originaltext macht das deutlicher:

Zitat:
This occurs when trying to infer RTTI from a generic type.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Generics in Attributen?

  Alt 23. Apr 2014, 22:39
Dann ist aber der Compiler defekt, wenn er die richtige Fehlermeldung nur bei einem Alias ausgibt, obwohl er eigentlich den generischen Typ meint.

PS: Zumindestens (in XE3) gibt sogar das Error-Insight einen Fehler aus, daß es den generischen Typ dort nicht mag.
(auch wenn dessen Fehlermeldung nichtssagend ist)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (23. Apr 2014 um 22:41 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.472 Beiträge
 
Delphi 12 Athens
 
#9

AW: Generics in Attributen?

  Alt 23. Apr 2014, 23:12
Dann ist aber der Compiler defekt, wenn er die richtige Fehlermeldung nur bei einem Alias ausgibt, obwohl er eigentlich den generischen Typ meint.
Defekt in dem Sinne, daß er nur eine Warnung abgibt, den Code aber trotzdem compiliert! Die Meldung "W1025 Sprach-Feature wird nicht unterstützt: 'Benutzerdefiniertes Attribut'" führt einen schlicht und ergreifend in die Irre. Was der Compiler eigentlich sagen will ist: "Hey, du hast da ein Attibut verwendet, das ich nicht kenne. Hast du dich eventuell verschrieben?" Die gleiche Warnung kommt nämlich auch wenn man einen Tippfehler bei der Attributangabe macht. Man darf sich bei den Attributen nämlich durchaus verschreiben - es funktioniert dann nur nicht wie man will (logisch).

Ich hatte eigentlich damit gerechnet, daß der Bug in XE6 behoben ist, aber...
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.172 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: Generics in Attributen?

  Alt 24. Apr 2014, 10:03
Allein duch den Alias-Typen kommt man aber erst zu dieser Fehlermeldung, die einfach nur besagt, daß sowas nicht geht.
Das wäre mir nie aufgefallen. Gut, dass es euch gibt

Ich hatte eigentlich damit gerechnet, daß der Bug in XE6 behoben ist, aber...
Wenn Embarcadero meint dass es "as designed" wäre, würde ich ihnen allerdings auch zustimmen: Es kann ja jeder einstellen, ob man nichts, eine Warnung oder einen Fehler haben möchte. Ich stelle es auch immer auf "Fehler" ein, aber das ist doch genauso ein "Bug" wie bsp. keine Bereichsprüfung in der Debug-Fassung oder Assertions im Release. Über alles kann man sich streiten, aber zum Glück kann es jeder einstellen wie er mag...



Trotzdem etwas schade, dass es nicht geht. Das Beispiel im DocWiki ist auch so ziemlich, was ich vorhatte. Aber naja, in Java geht's schließlich auch nicht
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 03:05 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