Dev/C, C++

함수 포인터 관련..

newtype 2006. 9. 19. 18:26
http://www.newty.de/fpt/index.html

windows 기반의 c++에서는

[CODE type=c++]
int (CFunc::*func)( int, int );
func = CFunc::GetArea;
CFunc A;
(A.*func)( x, y );
[/CODE]

[출처]
http://izeph.com/tt/blog/155


위 코드 처럼 Class의 맴버 메소드를 함수포인터로 사용할 수 있지만,
unix 기반에서는 사용 할 수가 없다.

unix 기반에서 사용하려면,

[CODE type=c++]
class TClassA
{
public:
  void Display(const char* text) { cout << text << endl; };
  static void Wrapper_To_Call_Display(void* pt2Object, char* text);
};
void TClassA::Wrapper_To_Call_Display(void* pt2Object, char* string)
{
  TClassA* mySelf = (TClassA*) pt2Object;
  mySelf->Display(string);
};
void DoItA(void* pt2Object, void (*pt2Function)(void* pt2Object, char* text))
{
  pt2Function(pt2Object, "hi, i'm calling back using a argument ;-)");  // make callback
};
void Callback_Using_Argument()
{
  TClassA objA;
  DoItA((void*) &objA, TClassA::Wrapper_To_Call_Display);
}
[/CODE]

[출처]
http://www.newty.de/fpt/callback.html#member

이렇게 래퍼를 한번 거쳐 사용해야 한다.
반응형