[컴][c/c++] c++ 함수 포인터의 사용법

static non-static function pointer / c/c++ 함수 포인터 / c++ 함수 포인터 / how to use c++ function pointer

function pointer 를 보다 보니, c++ 의 function pointer 가 c 와 조금 다른 모습이 있다. 자세한 사항은 ref.1 을 참고하면 된다. 여기서는 실제로 어떻게 사용하는지에 중점을 두고 이야기를 해보자.

c++ 에서 static function 과 non-static function 에 대한 declare 하는 방법이 조금 다르다.

declaration

  • non-static : class 의 이름을 명시해 줘야 하고,
  • static : 기존의 c 에서의 function pointer 와 같은 방법으로 선언하게 된다.

invocation

  • non-static : 호출시에도 instance를 통해서 호출하는 모습을 띠며,
  • static : c 에서 처럼 기존의 함수를 호출하듯이 호출하면 된다.

자세한 사항은 아래 예제를 보면서 확인하도록 하자.

/**
 * Main
 */

class A{
public :
  typedef void (A::*functionPointer)();

  functionPointer vvtable[1];
  functionPointer *vptr;

  virtual void test1(){
    std::cout << "test1" << std::endl;
    return;
  }
  static void test3(){
      std::cout << "test3" << std::endl;
      return;
    }


  A(){
    vvtable[0] = &A::test1;
    vptr = &vvtable[0];
    (this->*vvtable[0])();


  }

  virtual ~A() {}
};



typedef void (A::*fp)(); // non-static
typedef void (*fp2)(); // static

int main()
{

  A *aa = new A;

  fp f = &A::test1;
  (aa->*f)(); // call the function

  A::test3();
  fp2 f2 = &A::test3;
  f2(); // call the function



}



References

  1. http://www.newty.de/fpt/fpt.html#defi

댓글 없음:

댓글 쓰기