2013-08-16 2 views
0

코드 :멤버 함수를 가리 키도록 함수 포인터를 만드는 방법은 무엇입니까?

struct A 
{ 
    void* f(void *) 
    { 

    } 
}; 
int main() 
{ 
    void * (*fp)(void *); 
    fp = &A::f; 
} 

컴파일 :

|12|error: cannot convert 'void* (A::*)(void*)' to 'void* (*)(void*)' in assignment| 

내가 여러 가지 방법을 시도했지만 모두 실패 ... 어떻게 할까?

+0

체크 아웃 ['표준 : function'] (http://en.cppreference.com/w/cpp/utility/functional/function)와 ['표준 : bind'] (http://en.cppreference.com/w/cpp/utility/functional/bind). –

답변

3

이, 당신이 포인터 형에의 회원의 유형을 선언해야합니다 때문에

A a; 
std::function<void*(const A &, void*)> f_add_display = &Foo::print_add; 

하지만 mem_fn은 작업에 더 적합하다;

int main() 
{ 
    void * (A::*fp)(void *); 
    fp = &A::f; 
} 
3

당신이 정말로 당신이해야 할 (그렇지) 함수 포인터를 사용하려면 함수 포인터가 std::mem_fn

auto func = std::mem_fn(&A::f); 

을 사용하여 사용하지 마십시오.

void * (A::*func)(void*); 
func = &A::f; 

는 IMO이 또한이 같은 std::function을 사용할 수 있습니다


읽기 어려워, 이보다 적은 유지 보수입니다. 당신이 정회원 포인터를 들어 memfunction

1
std::function<void *(A&, void *)> fp = &A::f; 
관련 문제