Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
30.07.2003, 12:51
the_viking



Ich hab bei mir ne schöne kleine Klassenhierachie à la:

Quellcode:class Base
{
public:

int state;

vector<POINTERTOTICKLIKEFUNCTION> m_StateFunctions;

virtual void Tick(double dt)
{
(this->*m_StateFunctions[state])(dt);
}
};

class C1 : public Base
{
public:

virtual void IdleTick(double dt);
virtual void DieTick(double dt);
virtual void DeadTick(double dt);
};
Nun hab ich allerdings das Problem, das ich nicht weiß, wie ich POINTERTOTICKLIKEFUNCTION definieren soll. Afaik werden memberfunctions als pointer so definiert (bsp der Tick() Funktion): typedef void (Base::*PFNC)(double);

Das funktioniert ja auch,allerdings kann ich dort nur Funktionen aus Base speichern, keine aus abgeleiteten klassen. Die ganzen IdleTick()... DeadTick() lassen sich zB nicht speichern. Wenn ich den Pointer nun als typedef void (C1::*PFNC)(double); definiere, kann ich in dem Array sowohl Funktionen aus Base als auch C1 speichern...

Kann mir jemand weiterhelfen, wie ich es in genau umgekehrter Reihenfolge machen kann?? (Also Baseclass-definition, aber funktionen aus abgeleiteten klassen speichern)

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
001
30.07.2003, 14:17
Leviathan



Du willst in der Basisklasse Funktionszeiger auf Methoden von abgeleiteten Klassen speichern?
Das geht nicht, da eine Basisklasse ja nicht zwangsläufig abgeleitet werden muss und somit überhaupt nicht klar ist, ob die Methoden existieren. Auch kann es eine abgeleitete Klasse geben, die die Methode mit einem anderen Prototypen bereitstellt (z.B. void C1::func(int,long,short) statt bool C1::func(std::vector<std::string>)). Außerdem würdest du Probleme bekommen, wenn es um inline-Methoden geht.

--

Entities: HL | HL²
Kompilierfehler
r_speeds | mehr über r_speeds

zum Seitenanfang zum Seitenende Profil || Suche
002
30.07.2003, 16:16
the_viking



Hm.... naja, egal, ich hab es jetzt anders gelöst...

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche
003
30.07.2003, 23:24
theDon



memberfunktionen von klassen, auf die du mit funktionspointern zugreifen willst, müssen btw static sein.

--

\o tanz den naziprau! o/

And more than ever, I hope to never fall,
Where enough is not the same it was before

zum Seitenanfang zum Seitenende Profil || Suche
004
31.07.2003, 10:35
the_viking



Ne, es geht auch mit Normalen, aber so ein Pointer gilt halt immer nur für eine Klasse und nicht für die gesamte Hierarchie...

--

thx, cu, MfG the_viking

(( My =]=H=O=M=E=> Page! ))
Coder bei Brainshock-Interactive und bei Z-Software
My ICQ: #160959446

zum Seitenanfang zum Seitenende Profil || Suche