나는 콜백 함수로 사용되는 void f (void*, int);
함수를 가지고있다. 호출자는 void (*)(int)
을 예상합니다. std::bind1st
을 사용하여 서로 변환 할 수 있습니까? C++ 11 std::bind
, 그냥 std::bind1st
을 사용하지 않고 이것을 할 수있는 방법이 있습니까?void (*) (void *, int)를 void (*) (int)로 변환하는 데 std :: bind1st를 사용할 수 있습니까?
0
A
답변
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*
에서 인터페이스에 대해 너무 열심히 생각하지 않았습니다.
관련 문제
- 1. void (__thiscall MyClass :: *) (void *)를 void (__cdecl *) (void *) 포인터로 변환하는 방법
- 2. void *
- 3. int를 void *로 변환하는 것은 무엇을 의미합니까?
- 4. std :: string에 void void * (char *없이 0) std :: string
- 5. OpenGl glutIdleFunc (void (* func) (void))
- 6. void *를 std :: string으로 변환합니다.
- 7. Spring Roo 'Encountered ""void ""void ""'
- 8. pthread에서 void * (*) (void *)를 void * (클래스 이름) (void *) 유형으로 변환 할 수 없습니다.
- 9. pthread_create 함수에서 '* void (MyClass :: *) (void *)를 void * (*) (void *)로 변환 할 수 없습니다.
- 10. cast void * to std :: map
- 11. char 함수 (void)와 void 함수 (void) 사이의 C 차이
- 12. std :: vector를 void 포인터로 복사하십시오.
- 13. 사용 방법 : - (void) saveErrorHandler : (void (^) (NSError *)) errorCallback;
- 14. Object/% * void *
- 15. 오류 : "void (opca_hello ::)()"유형의 인수가 "void * (*) (void *)"와 일치하지 않습니다.
- 16. 쉘 스크립트 : 의미/do 표현식 - void void VARIABLE void?
- 17. C에서 void 포인터를 배열로 사용할 수 있습니까?
- 18. 보낸 사람 void 값을 antoher로 void
- 19. void *를 CString으로 변환하는 방법
- 20. void 함수에 대한 Mockito - thenCallRealMethod() void
- 21. void WCF operation from empty void
- 22. void (** vt)() = * (void (***)()) ptr; C에서 가상 테이블 ++
- 23. pthread_create :: 'void *'(void *) 유형의 매개 변수를 'void *'유형의 값으로 초기화 할 수 없습니다.
- 24. 오류 : 'void (FlashWork :: *) (int, siginfo_t *, void *)'에서 'void * (*) (int, siginfo_t *, void *)'로 변환 함
- 25. "typedef void VOID"에 내장 된 "void"와 "VOID"의 차이점은 무엇입니까?
- 26. C++ 및 box2d : userdata void void *
- 27. void 포인터 void 형 캐스트 함수 호출?
- 28. 함수 호출 <Void,Void> .apply()?
- 29. void __iomem *과 void * __iomem의 차이점은 무엇입니까?
- 30. typedef void (AFX_MSG_CALL ClassName :: * AFX_PMSGptr) (void);
실제로. 글로벌/정적 변수를 피하기를 바랬습니다. 답변 해주셔서 감사합니다. –
@violetgiraffe 다른 방법은 자체 수정 코드를 작성하는 것입니다.이 코드는 C++보다 이식성이 낮고 하위 수준입니다. 기본적으로 OS에서 쓰기 가능한 페이지를 가져오고, 알려진 함수를 기계 코드에 내장 된 상수로 blit하고, 상수를 수정하고, 페이지를 읽기 전용 및 실행 가능으로 표시 한 다음 '하드 코드 된' void *'. 그리고 네, 이것은 많은 플랫폼에서 가능 합니다만, 그것은 거의보기가 현명하지 않습니다. 전역 변수를 사용하고 둘 이상이 필요하면'N'과 전역 배열 집합을 사용하고'N' 이상을 사용하지 않는다고 주장하십시오. – Yakk