2013-10-07 3 views
0

내가 찾고 인수가 지금까지 this method 잘 작동하여 다시 전화boost :: bind를 사용하여 클래스/구조체 인스턴스를 콜백에 인수로 전달하는 방법?

boost::bind를 사용하여 기능을 다시 전화로 통과 클래스와 구조 인스턴스의 문제에 붙어 있어요. 내가 코드를 아래와 같이 사용하려면이

class A 
{ 
    public : 
    static int i = 1; 

}; 

는 그러나, 나는 당신이 직접 부스트 바인딩을 사용할 수 없습니다

void Init(void (*Notify)(A *a, int, int,int),int arr[], 
      A *a, value,int left,int right) 
{ 

} 
+1

컴파일에 실패한 특정 코드 줄을 게시 할 수 있습니까? "이 클래스 인스턴스를이 콜백 함수 포인터에 전달하려고합니다."라는 말의 의미가 명확하지 않습니다. –

답변

0

설명이 콜백 함수 포인터에이 클래스의 인스턴스를 전달하려는 니펫 이.

void (*)(A *a, int, int, int) 

그래서이 같은 일을 구현할 수 :

void foo(A *a, int x, int y, int z) 
{ 
    a->whatever(x, y, z); 
} 

그런 다음 Init(foo, ...)를 호출 할 것입니다 귀하의 Init 기능이 서명을 가진 무료 함수에 대한 포인터가 필요합니다.

하지만 무료 함수 여야합니다. 다소 동등한 부스트 바인드 표현식이 작동하지 않습니다 :

boost::bind(&A::whatever, _1, _2, _3) 

왜 작동하지 않습니까? Init에는 무료 기능이 필요하기 때문에 (예 : boost::function<void(A*,int,int,int>)>boost::bind을 지원합니다.

관련 문제