Einzelnen Beitrag anzeigen

Tryer

Registriert seit: 16. Aug 2003
200 Beiträge
 
#21

Re: Prozedur-Parameter mit variantem Typ?

  Alt 20. Mai 2004, 09:43
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:
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;
MfG,
Tryer
  Mit Zitat antworten Zitat