멤버함수를 함수포인터로 쓸수 있나요?
글쓴이: pok / 작성시간: 일, 2005/11/20 - 5:55오후
class Ipc { public: .... void setSig(); private: .... void p_action(int sig){printf("Parent:\n");} void c_action(int sig){printf("Child:\n");} struct sigaction pact, cact; }; void Ipc::setSig(){ pact.sa_handler = p_action; sigaction(SIGUSR1, &pact, NULL); cact.sa_handler = c_action; sigaction(SIGUSR2, &cact, NULL); }
이런식으로 시그액션함수에 맴버함수를 포인터해서 쓰려고합니다.
그런데 void(Ipc::)(int)는 void(*)(int)로 캐스팅될수 없다면서(..맞나?) 에러가 나는군요.
그래서 p_action함수와 c_action함수는 전역에 두어서 사용하고 있습니다.
p_action함수와 c_action함수를 멤버함수로 두고 쓰는 방법은 없나요?
Forums:
p_action과 c_action 을 static으로 만들어서 사용하는
p_action과 c_action 을 static으로 만들어서 사용하는 수 밖에 없습니다.
그렇게 되면 static이 붙지 않은 멤버 변수에는 접근이 불가능하게 되는 단점이 있습니다.
즉, static 멤버함수만 등록하여 사용할 수 있게 되고, 그 이유는 다른 함수들과 달리 내재된 this pointer의 전달이 일어나지 않기 때문에 가능한 것입니다.
---
http://coolengineer.com
static 이 아닌 member function을 free functi
static 이 아닌 member function을 free function의 function pointer에 넣을 수 없습니다. 이유는 member function은 홀로 있을 수 없고 instance와 함께 존재해야 하기 때문입니다. C#에서는 언어 명세에서 this 만을 강제로 연결합니다만 C++의 경우는 그렇지 않기 때문에 그렇습니다.
----------------------------------------
http://moim.at
http://mkhq.co.kr
댓글 달기