#include "stdafx.h"
class CStateManager
{
private:
/// 0: idle state
/// 1: attack state
/// 2: game over state
int m_iState;
void State_Idle();
void State_Attack();
void State_GameOver();
public:
CStateManager();
void SetState(int state);
void DoIt();
}; //Class CStateManager
void CStateManager::State_Idle()
{
printf("idle\n");
}
void CStateManager::State_Attack()
{
printf("Attack\n");
}
void CStateManager::State_GameOver()
{
printf("Game Over\n");
}
//생성자
CStateManager::CStateManager()
{
m_iState =0;
}
void CStateManager::SetState(int state)
{
m_iState = state;
}
void CStateManager::DoIt()
{
//switch(m_iState)
//{
//case 0:
// State_Idle();
// break;
//case 1:
// State_Attack();
// break;
//case 2:
// State_GameOver();
// break;
//}
static void(CStateManager::*fp[3])()=
{
&CStateManager::State_Idle,
&CStateManager::State_Attack,
&CStateManager::State_GameOver
};
(this->*fp[m_iState])();
}
int main()
{
void (CStateManager::*fp)(int); //pinter to a member function
fp = &CStateManager::SetState;
CStateManager sman;
//sman.SetState(0);
//sman.DoIt();
(sman.*fp)(1);
sman.DoIt();
(sman.*fp)(2);
sman.DoIt();
char c;
scanf("%c",&c);//stop
return 0;
}