AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamischer Funktionsaufruf

Offene Frage von "Sämy"
Ein Thema von Sämy · begonnen am 31. Jan 2007 · letzter Beitrag vom 31. Jan 2007
Antwort Antwort
Sämy

Registriert seit: 4. Nov 2004
Ort: Basel (CH)
76 Beiträge
 
Delphi 2007 Professional
 
#1

Dynamischer Funktionsaufruf

  Alt 31. Jan 2007, 10:22
Hallo

Ich habe einige verschiedene Klassen, welche Listen für andere Klassen darstellen:

Delphi-Quellcode:
TBCEffect = class
private
  eid: Integer;
  name: String;
public
  getEID: integer;
  getName: String;
  //...
end;

TBCEffectList = class
private
  function getEffectByID(eid: integer): TBCEffect;
  function getEffectByName(name: String): TBCEffect;
  //...
end;
Nun speichere ich die verschiendenen TBCEffect- Objekte in einer eigen gebauten HashMap im TBCEffectList.

Ich möchte nun über die Liste (TBCEffectList) ein TBCEffect- Objekt finden können. Und zwar nach einer seiner Eigenschaften(eid, name, ...).
Dies ist auch kein Problem. Doch muss ich die Prozeduren(getEffectByID, getEffectByName) in jeder Liste implementieren(gibt noch andere ausser TBCEffectList).

Mein Vorhaben ist es nun, diese Funktion in eine abstrakte Klasse zu extrahieren.
Doch habe ich nun das Problem, dass die Funktionen zum die ID zu holen, in jeder Klasse anders heissen (getEID, getDID, getBID, ...)

Kann ich nun von der Kinderklasse TBCEffectList zB. per String angeben, wie die benötigte Funktion heisst und diese, ohne case oder so, direkt aufrufen? (Ich kenne dieses Vorgehen aus Java, dort funktioniert dies)
Oder kann man dies irgentwie durch Pointer auf die Funktion lösen?

Gruss und Danke
Sämy
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
  Mit Zitat antworten Zitat
Benutzerbild von yörsch
yörsch

Registriert seit: 10. Jan 2007
Ort: Lampertheim
206 Beiträge
 
Delphi XE2 Architect
 
#2

Re: Dynamischer Funktionsaufruf

  Alt 31. Jan 2007, 10:39
HAI Sämy


ich hab sowas für Kameras gemacht.
in der abstrakten Klasse KAMERA weis ich nicht was die konkrete Kamera kann.
Muß aber über die Abstrate Klasse abfragen was kann die konktete Kamera kann...

in der Abstrakten Klasse für allgemeine Parameter:
Delphi-Quellcode:
function TKamera.GetParameter(Param:Integer): string;
begin
  IF Param = ckam_act_size_x then Result := IntTostr(fact_size_x)
  Else IF Param = ckam_act_size_y then Result := InttoStr(fact_size_y)
  Else IF Param = ckam_org_size_x then Result := InttoStr(forg_size_x)
  Else IF Param = ckam_org_size_y then Result := InttoStr(forg_size_y)
  ...
  ; // case geht auch!!!
end;
in der Konkreten Klasse TBaumer ist von TKamera abgeleitet:
Delphi-Quellcode:
procedure TBaumer_fx.SetParameterInt(Param: integer;
  const Value: Integer);
begin
  IF Param = ckam_dym_size_x then Result := IntTostr(fdym_size_x)
  Else IF Param = ckam_dym_size_y then Result := InttoStr(fdym_size_y)
  ...
  Else Result := inherited GetParameterInt(Param);
end;
oder versteh ich das Problem Falsch ???
Jörg
have FUN
  Mit Zitat antworten Zitat
Sämy

Registriert seit: 4. Nov 2004
Ort: Basel (CH)
76 Beiträge
 
Delphi 2007 Professional
 
#3

Re: Dynamischer Funktionsaufruf

  Alt 31. Jan 2007, 12:45
Mein Ziel wäre es eben, dass ich in der abstrakten Klasse keine ifs schreiben müsste.
Sondern, dass ich der abstrakten Klasse beibringen könnte, wie er auf die Funktion zugreifen kann(von extern).

Dann könnte auch die Situation, dass eine andere Klasse zB. eine Eigenschaft "length" hat, eine weitere jedoch nicht, behandelt werden... (und ich müsste diese nicht in der abstrakten Klasse mit einem if "registrieren")
Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#4

Re: Dynamischer Funktionsaufruf

  Alt 31. Jan 2007, 13:19
Dann solltest du dich einmal mit der Delphi-RTTI/Unit TypInfo anfreunden, wobei auch Einiges dazu hier im Forum zu finden ist.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
31. Jan 2007, 14:18
Dieses Thema wurde von "SirThornberry" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Antwort Antwort


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 19:14 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