定义:
class SpaceShip:public GameObject
{
private:
typedef void (SpaceShip::*HitFunctionPtr)(GameObject&) ;
static HitFunctionPtr lookup(const GameObject& whatWeHit) ;
} ;
使用:
void SpaceShip::collide(GameObject& otherObject)
{
HitFunctionPtr hfp = lookup(otherObject) ;
if(hfp)
{
(this->*hfp)(otherObject) ;
}
else
{
throw CollisionWithUnknownObject(otherObject) ;
}
}
// 另一种示例
class SpaceShip:public GameObject
{
private:
typedef void (SpaceShip::*HitFunctionPtr)(GameObject&) ;
typedef map<string, HitFunctionPtr> HitMap ;
} ;
SpaceShip::HitFunctionPtr SpaceShip::lookup(const GameObject& whatWeHit)
{
static HitMap collisionMap ;
HitMap::iterator mapEntry = collisonMap.find(typeid(whatWeHit).name()) ;
if(mapEntry == collisonMap.end()) return 0 ;
return (*mapEntry).second ;
}