멤버 함수 포인터1

멤버 함수 포인터를 어디 사용 할까?
클래스의 객체와 함수 포인터를 저장하여 명령어 테이블을 만들려고 한다.
Functor(함수 객체)로도 가능 할까 생각 해봤지만, 별다른 방법이 안보인다.
객체 포인터와 멤버 함수 포인터를 테이블에 저장하여 실행하는 것을 구현하는게 목표다.

//  멤버 함수 포인터

//  http://www.gpgstudy.com/forum/viewtopic.php?t=13618&highlight=%B0%A1%BB%F3%C7%D4%BC%F6

 

 

#include <stdio.h>

#include <tchar.h>

 

struct Base

{

    virtual void Compute( int n )    { printf( "Base: %d\n", n ); }

};

 

struct Derived : public Base

{

    virtual void Compute( int n )    { printf( "Derived: %d\n", n*n ); }

};

 

 

void _tmain(int argc, _TCHAR* argv[])

{

    Derived obj;

    Base* pBase = &obj;

 

    void (Base::*func)( int );

    func = static_cast<void (Base::*)(int) >( &Derived::Compute );

    (obj.*func)( 2 );

    (pBase->*func)( 2 );

}

실행 될 메소드는 가상함수로 선언한다.

func으로 멤버 함수 포인터를 정의한 후, Compute() 함수로 초기화 한다.

func을 가상함수 포인터로 초기화 한다.

obj 객체의 func 함수를 실행한다.