class CMemFunc
{
public:
CMemFunc();
virtual ~CMemFunc(){};
typedef void (CMemFunc::*PesudoAction)();
typedef CMemFunc::PesudoAction PACTION;
typedef PACTION (CMemFunc::*Action)();
typedef CMemFunc::Action ACTION;
PACTION print1();
PACTION print2();
void ChangeAction(Action newAction);
void DoAction();
private:
PesudoAction action;
};
CMemFunc::CMemFunc()
{
action = (PesudoAction)&CMemFunc::print1;
}
PACTION CMemFunc::print1()
{
std::cout << "print 1" << std::endl;
return 0;
//if (!CanNotHandle())
//{
return (PesudoAction)&CMemFunc::print2;
//}
}
PACTION CMemFunc::print2()
{
std::cout << "print 2" << std::endl;
return 0;
}
void CMemFunc::ChangeAction(Action newAction)
{
action = (CMemFunc::PesudoAction)newAction;
}
void CMemFunc::DoAction()
{
(this->*action)();
}
int _tmain(int argc, _TCHAR* argv[])
{
CMemFunc *p = new CMemFunc();
p->DoAction();
p->ChangeAction(&CMemFunc::print2);
p->DoAction();
delete p;
return 0;
}