poco library를 살펴보다가, 좋은 아이디어가 있어서, 남긴다.
C에서의 함수포인터 처럼, C++객체의 메소드를 포인터로 넘길 수 없을까? 라는 생각을 하고 있었는데,
그것에 대한 어느정도의 해답이 된 것 같다.
객체 내에 static으로 구현된 멤버 메소드는 그냥 함수포인터 처럼 넘기는 것이 가능하다.
그렇지 않고, static이 아닌 public으로 되어있는 멤버에 대한 포인터를 넘기는 방법을 어떻게 될까?
이거.. 나만 모르고 있었던 건가 --;;.......
편의상 인라인으로 처리한다..
#include <iostream>
using namespace std;
class MyObject
{
public:
MyObject(){};
~MyObject(){};
public:
void callback()
{
cout << "call me" << endl;
}
};
class JHObject
{
public:
JHObject(){};
~JHObject(){};
public:
void run(MyObject* obj, void (MyObject::*pMethod)())
{
(obj->*pMethod)();
}
};
int main()
{
MyObject my;
JHObject jh;
jh.run(&my, &MyObject::callback);
return 0;
}
using namespace std;
class MyObject
{
public:
MyObject(){};
~MyObject(){};
public:
void callback()
{
cout << "call me" << endl;
}
};
class JHObject
{
public:
JHObject(){};
~JHObject(){};
public:
void run(MyObject* obj, void (MyObject::*pMethod)())
{
(obj->*pMethod)();
}
};
int main()
{
MyObject my;
JHObject jh;
jh.run(&my, &MyObject::callback);
return 0;
}
간단했다.. 역시 알면 간단, 모르면 -_- 안드로메다..;;
객체에대한 메서드를 포인터로 넘길때에는 그 메서드를 호출할 객체에 대한 포인터도
함께 넘겨야 했던 것이다...
TAG 메소드포인터
이올린에 북마크하기
이올린에 추천하기
