멤버 함수 포인터3

이번장에서는 추상 베이스 클래스를 통하여 클래스의 멤버 함수 포인터와 클래스의 객체를 저장하여 실행본다.

class IFunctionImp

{

public:

    virtual void Process() = 0;

};

 

template<class T>

class FunctionImp : public IFunctionImp

{

public:

    typedef void (T::*Callback)();

 

    FunctionImp(T * obj, Callback callback) :  m_pOobj(obj), m_callback(callback)

    {

    }

 

    void Process()

    {

        (m_pOobj->*m_callback)();

    }

 

private:

    T * m_pOobj;

    Callback m_callback;

};

FunctionImp 클래스는 IFuntionImp 추상 클래스(인터페이스)를 상속 받는다.
FunctionImp 생성시 객체와 콜백 함수를 넘겨준다.

void main()

{

  Lion        lion;

  Tiger        tiger;

 

  FunctionImp<Lion> lion_run(&lion, &Lion::Run);

  FunctionImp<Tiger> tiger_idle(&tiger, &Tiger::Idle);

 

  lion_run.Process();

  tiger_idle.Process();

 

  IFunctionImp* pkImp = NULL;

  pkImp = &tiger_idle;

  pkImp->Process();

}

FunctionImp::Process()로 콜백함수를 실행 한다.

 

소스 : CmdTable2.cpp

참조:

http://blog.naver.com/blueslame/110003931710

http://blog.naver.com/drrich?Redirect=Log&logNo=20024688910

http://gamepro.tistory.com/408

참조 원본:

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=7301&ref=7301

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=51&MAEULNo=20&no=7312&ref=7312