2013-12-16 3 views

답변

2

std::bind1st() 비록 통화 운영자 취하고 int와 함수 객체를 생성하고, 그것을 하지void(*)(int)이다. 유일한 방법은,

static void* data = 0; // probably needs to be set to a more suitable value 
void f_forward(int value) { 
    f(data, value); 
} 

누구라도 예를 들어 사용자 정의 된 컨텍스트를 가지고 있지 않은 콜백을 제공하는, 예를 들면, void(*)(int)void(*)(void*, int) 글로벌 리소스 중 void*를 획득 전달 함수를 갖는 것이다 우회전 방금 통과 한 C와 같은 인터페이스 void*에서 인터페이스에 대해 너무 열심히 생각하지 않았습니다.

+0

실제로. 글로벌/정적 변수를 피하기를 바랬습니다. 답변 해주셔서 감사합니다. –

+0

@violetgiraffe 다른 방법은 자체 수정 코드를 작성하는 것입니다.이 코드는 C++보다 이식성이 낮고 하위 수준입니다. 기본적으로 OS에서 쓰기 가능한 페이지를 가져오고, 알려진 함수를 기계 코드에 내장 된 상수로 blit하고, 상수를 수정하고, 페이지를 읽기 전용 및 실행 가능으로 표시 한 다음 '하드 코드 된' void *'. 그리고 네, 이것은 많은 플랫폼에서 가능 합니다만, 그것은 거의보기가 현명하지 않습니다. 전역 변수를 사용하고 둘 이상이 필요하면'N'과 전역 배열 집합을 사용하고'N' 이상을 사용하지 않는다고 주장하십시오. – Yakk

관련 문제