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 }
댓글 없음:
댓글 쓰기