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
이렇게 래퍼를 한번 거쳐 사용해야 한다.
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
이렇게 래퍼를 한번 거쳐 사용해야 한다.
반응형