class AuServant;
class AuPhysicsBase
{
public:
AuServant *m_pHired;
};
//>PhysicsBase的仆人类,为雇主实现特定功能
class AuServant
{
public:
AuServant(AuPhysicsBase * a);
~AuServant();
virtual void DoThings(){}
protected:
AuPhysicsBase * m_pHost;
};
AuServant::AuServant(AuPhysicsBase *a)
{
m_pHost = a;
}
#define DECLARE_PHYSICSBASEHIRED_CLASS( classname, hostclassname) \
class classname: public AuServant \
{ \
public: \
classname(hostclassname *pHost):AuServant(pHost){} \
void DoThings(); \
};
DECLARE_PHYSICSBASEHIRED_CLASS(AuNewThinker , AuPhysicsBase)
class AuMine: public AuPhysicsBase
{
public:
void Think(){m_pHired->DoThings();}
};
void AuNewThinker::DoThings()
{
AuMine *m_thinker = static_cast<AuMine*>(m_pHost);
int a = 0;
}
int main()
{
AuMine *a = new AuMine();
AuNewThinker* think = new AuNewThinker(a);
a->m_pHired = think;
a->Think();
}// : baseclassname(pHost)