![]() |
ClassOperator Implict greift nicht
Moin ihr,
ich hab da ein kleines Problemchen mit den Klassenoperatoren. :cry: Und zwar geht Einiges einfach nicht, obwohl ich dachte es würde so gehn? :gruebel:
Code:
Type TWindow = Record
Public Class Operator Implicit(Handle: HWND): TWindow; Class Operator Implicit(Rec: TWindow): HWND; End; Procedure Test(H: HWND); Begin End; Var H: HWND; W: TWindow; 42: W := H; // [color=green]geht[/color] 43: W := 123; // [color=green]geht[/color] 44: H := W; // [color=red]geht nicht[/color] 45: Test(W); // [color=red]geht auch nicht[/color] 46: If W = H Then ; // [color=red]geht nicht[/color] Zitat:
Der "Witz" dabei ist, wenn ich das Ganze z.B. mit String statt HWND versucht, dann geht plötzlich alles. :schock: |
Re: ClassOperator Implict greift nicht
schau mal hier:
![]() funktioniert erst ab Delphi2007 richtig ..... |
Re: ClassOperator Implict greift nicht
Zitat:
guck Dich mal in den .NET Sourcen um für Currency .. da wirds ersichtlich, wie alles funktioniert :-) man kann lustige Sachen damit machen .... wir weisen neuerdings sogar Pointer auf den Record Typ zu, und umgekehrt, dabei findet eine automatische Kopie statt. p := W; W := P; :-) |
Re: ClassOperator Implict greift nicht
Equal hatte ich ja ... sozusagen :stupid:
Delphi-Quellcode:
dann könnte es also an dem TYPE liegen :gruebel:
HWND = type LongWord;
TDateTime = type Double; meine Test haben letztendlich ergeben, daß es so geht, aber so ganz 100%ig bin ich damit nicht wirklich zufrieden :freak:
Delphi-Quellcode:
Type TnWindow = Record
Class Operator Implicit(Handle: LongWord{HWND}): TnWindow; Class Operator Implicit(Rec: TnWindow): LongWord{HWND}; Class Operator Equal (Left, Right: LongWord{HWND}): Boolean; Class Operator NotEqual(Left, Right: LongWord{HWND}): Boolean; End; |
Re: ClassOperator Implict greift nicht
Zitat:
Wie gesagt, in BDS2006 geht das alles noch nicht wirklich so richtig ... |
Re: ClassOperator Implict greift nicht
BDS2006, da es in D7 noch nicht geht.
ich glaub ich bau erstmal Compilerschlater ein, denn so wie es aussieht, werd' ich bis zum Commodore (RAD Studio 2009 ??) noch damit leben müssen :? nja, zumindestens ist das Programm so lauffähig und im Commodore sollte es dann ja endlich richtig funktionieren :angel2: Zitat:
|
Re: ClassOperator Implict greift nicht
Zitat:
Es funktioniert wie gesagt in D2006 noch nicht. Ein Workarround ist mir da noch nicht eingefallen, ist einfach eben ncoh ein Bug. was allerdings jetzt noch schick wäre, wenn sowas gehen würde :)
Delphi-Quellcode:
PLetter =^TLetter;
TLetter = packed record class operator implicit(const Value : Boolean) : PLetter; end; und dann function Test; var p : PLetter; begin p := true; end; sowas wie weiter unten funktioniert übrigens jetzt schon und ist recht lustig :-) Man ist sehr flexibel und einheitlich, man spart sich das schreiben des "^" Zeichens. Und kann automatisch umkopieren.
Delphi-Quellcode:
PLetter =^TLetter;
TLetter = packed record class operator implicit(const Value : TLetter) : PLetter; class operator implicit(const Value : PLetter) : TLetter; end; function Test; var p : PLetter; letter1, letter2 : TLetter; begin p := letter1; letter2 := p; end; wenn ich gerade beim Wünschen bin, Default Properties (nicht nur bei ArrayProperties) in Klassen und Property überladung wäre noch schick... hmmm .. ob das jemand liest von GodeGear? :-) |
Re: ClassOperator Implict greift nicht
tja, ist schade, also heißt es warten (oder die bringen doch noch Turbo Delphi 2007 raus)
das mit den Default Properties klingt gut, aber am Verhalten bei Pointern spiele ich lieber nicht rum ... hab mir vorgenommen es so nutzbar zu machen, daß es sich wie eine "normale" Variable verhält (z.B. 'nen Integer), aber für sowas wie "String" wären ein Konsruktor und Destruktor nett, welcher auch automatisch bei Definiion einer Variable von Delphi angewendet werden ... halt so wie beim "String" und all den anderen dynamischen Arrays |
Re: ClassOperator Implict greift nicht
Zitat:
ähm, ja, da hast Du allerdings Recht .. Konstruktoren wie in C++ wären gut. Am liebesten noch automatischer Aufruf, dass man noch den Record initialisieren kann. Bei Interfaces geht ja die AddRef Zählung auch automatisch.. Noch schöner, wenn man Klassen auch statisch verwenden könnt. Aber man will ja nicht zuviel träumen. ABER vielleicht, weil der Compiler mit 64 Bit eh mal entstaubt werden muss, und man dann ja nicht mehr die Ausrede benutzen kann, dass Delphi Programme noch auf 386 laufen und laufen müssen, vielleicht schaffen sie ja eine Art Plattformcompiler für C++ und Delphi, der dann alles kann :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:02 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-2025 by Thomas Breitkreuz