![]() |
Re: Prozedur-Parameter mit variantem Typ?
Hier nochmal eine andere Fassung: Zugriff auf die Variablen über getrennte Get-und Set-Routinen mit typlosem Value (-> ausserhalb kein Casting nötig, aber halt auch kein "property-Zugriff").
Wenn Du bei der vorherigen Lösung bleiben willst dann würde ich das TNumber wieder rausschmeissen und statt dessen mit TQuat arbeiten, da passen die anderen Typen schliesslich auch rein.
Delphi-Quellcode:
MfG,
type
TVariableArray = array [TVarNames] of TQuat; TDummy = class private FVars: TVariableArray; protected public NumFormat: TNumFormat; procedure SetVariable(VarName: TVarNames; const Value); procedure GetVariable(VarName: TVarNames; var Value); end; implementation { TVaribles } procedure TDummy.GetVariable(VarName: TVarNames; var Value); begin case NumFormat of nfReal: Double(Value) := PDouble(@FVars[VarName])^; nfComplex: TComplex(Value) := PComplex(@FVars[VarName])^; nfQuat: TQuat(Value) := FVars[VarName]; end; end; procedure TDummy.SetVariable(VarName: TVarNames; const Value); begin case NumFormat of nfReal: PDouble(@FVars[VarName])^ := Double(Value); nfComplex: PComplex(@FVars[VarName])^ := TComplex(Value); nfQuat: FVars[VarName] := TQuat(Value); end; end; procedure Test; var Dum: TDummy; D: Double; C: TComplex; Q: TQuat; begin Dum := TDummy.Create; Dum.NumFormat := nfReal; D := 1.234; Dum.SetVariable(A, D); Dum.NumFormat := nfComplex; C.X := 1.23; C.Y := 4.56; Dum.SetVariable(B, C); Dum.NumFormat := nfQuat; Q.X := 1.23; Q.Y := 4.56; Q.Z := 7.89; Q.W := 10; Dum.SetVariable(C, Q); end; Tryer |
Re: Prozedur-Parameter mit variantem Typ?
Geil geil geil :thuimb: !
Ich hätte ja garnicht zu hoffen gewagt, dass man einen Parameter typenlos deklarieren kann! Drüber seniert hatte ich, es aber schnellstens wieder verworfen, da Delphi ja so typstreng ist :roll: (scheinbar wohl nicht ganz so sehr :) ) Dass der Propertyzugriff flöten geht ist absolut egal. Das ist dann nur eine Frage der Dokumentation - kein Problem! Wow, genau so hatte ich mir das vorgestellt. Super-duper-heissen Dank! :firejump: ein glücklicher dizzy :hello: \\edit: Nachtrag: Ich habe jetzt alles so umgebaut wie du vorschlugst --- und es klappt 1A !! So wie ich mir das gewünscht hab. Nochmals vieeeelen Dank :party: Alleine wäre ich an so einigen Stellen bös hängen geblieben... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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