![]() |
Record mit class operator als verknüpften String ausgeben
HiHo DP!
Ich habe eine Frage zu den class operators in Delphi. Ich habe 2 Records die über den class operator 'implicit' die enthaltenen Variablen als Text ausgeben. Nun möchte ich diese Beiden Records aber in einem String zusammenführen was Delphi aber nicht mitmachen möchte. Ich habe zwar eine Lösung, aber die ist etwas unschön. Hier mal eine Beispiel: Ich brauche als String einen Satz aus 3 Koordinaten. Eine Koordinate besteht aus den 3 Dimensionen (x, y, z). Getrennt werden die Koordinaten mit einem ';' und die Dimensionen mit ':' so das folgendermaßen ausgegeben wird: '123:123:123;456:456:456;789:789:789'
Delphi-Quellcode:
Ich habe das ganze auch mit dem class operator 'add' probiert. Delphi meckert dann zwar nicht mehr, jedoch erhalte ich dann nur eine verkrüppelte ausgabe z.b. '123:123:123456:456:456' etc.
TKoordinate = record
X: Extended; Y: Extended; Z: Extended; class operator implicit(aValue: TKoordinate): string; end; TPosition = record K1: TKoordinate; K2: TKoordinate; K3: TKoordinate; class operator implicit(aValue: TPosition): string; end; class operator TKoordinate.implicit(aValue: TKoordinate): string; begin Result:= FloatToStr(aValue.X) + ':' + FloatToStr(aValue.Y) + ':' + FloatToStr(aValue.Z); end; class operator TPosition.implicit(aValue: TPosition): string; begin // funktioniert nicht: Delphi meldet das dieser operanden typ nicht anwendbar sei Result:= aValue.K1 + ';' + aValue.K2 + ';' + aValue.K3; // funktioniert, wäre aber unschön, da die ausgabe der Koordinate ja schon in TKoordinate gemacht werden kann Result:= FloatToStr(aValue.K1.X) + ':' + FloatToStr(aValue.K1.Y) + ':' + FloatToStr(aValue.K1.Z) + ';' + FloatToStr(aValue.K2.X) + ':' + FloatToStr(aValue.K2.Y) + ':' + FloatToStr(aValue.K2.Z) + ';' + FloatToStr(aValue.K3.X) + ':' + FloatToStr(aValue.K3.Y) + ':' + FloatToStr(aValue.K3.Z); end; die strings mit 'concat' zusammenzufügen habe ich noch nicht probiert. in der delphi hilfe steht jedoch, das 'concat' wesentlich langsammer ist als '+'. ich brauche auch definitiv beide records deklarationen, da ich auch mit TKoordinate einzeln arbeiten muss. wäre schön wenn jemand eine lösung kennt. wenn nicht, auch nicht sooo schlimm ;) Danke schonmal mfg euer Benutzername |
Re: Record mit class operator als verknüpften String ausgebe
Versuchs mal hiermit:
Delphi-Quellcode:
class operator TPosition.implicit(aValue: TPosition): string;
var s1, s2, s3: string; begin s1 := aValue.K1; s2 := aValue.K2; s3 := aValue.K3; Result:= s1 + ';' + s2 + ';' + s3; end; |
Re: Record mit class operator als verknüpften String ausgebe
so gehts natürlich auch :D
vielen Dank! |
Re: Record mit class operator als verknüpften String ausgebe
Zitat:
TPosition + String = String String + TPosition = String TPosition + TPosition = String PS: wenn du dir noch ein 2D-TKoordinate mit 2 TPosition drinnen erstellst und dann TPosition + TPosition = 2D-TKoordinate 2D-TKoordinate + TPosition = TKoordinate dann könnte man vermutlich auch sowas machen TPosition + TPosition + TPosition = TKoordinate würde intern ja dann so abgehandelt 2D-TKoordinate(TPosition + TPosition) + TPosition = TKoordinate |
Re: Record mit class operator als verknüpften String ausgebe
Ich halte es nicht für geschickt, eine implizite Konversion von deinem Record zu einem String zu definieren. Eine implizite Umwandlung sollte die Bedeutung des Wertes erhalten; zum Beispiel ist eine implizite Konversion von Real zu Complex sinnvoll. Ich würde daher in deinem Beispiel eher eine Methode ToString einführen. Letztlich ist das aber natürlich deine Entscheidung.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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