C++로 작성된 사용자 정의 Menu 클래스가 있습니다. 코드를 읽기 쉬운 함수로 분리하기 위해 콜백을 사용하고 있습니다.C++에서 유용한 콜백을 구현하는 좋은 방법
Menu의 호스트에 Singletons를 사용하고 싶지 않기 때문에 콜백에 첫 번째 매개 변수 (누락 된 "this"참조에 대한 일종의 해결 방법)가 주어질 다른 매개 변수 (target) . Handler를
/* static */
void MyApp::OnModeSelected(void* that, MenuItem* item) {
MyApp *self = (MyApp*)that;
self->activeMode = item->text;
}
의 등록
menu->AddItem(TRANSLATE, "translate", &MyApp::OnModeSelected);
예의
등록-서명
AddItem(string s, void(*callback)(void*,MenuItem*), void* target = NULL)
예는 하나이 방법으로 더러운도 고려할 수 있습니다 무엇인가? 어쩌면 더 좋은 것들이 있을까요?
당신은해야 여기서 정적 멤버 메서드를 콜백으로 사용하지 말고 extern "C"로 선언 된 함수 만 사용해야합니다. 사용중인 컴파일러가 (현재) 정적 메서드를 호출하는 데 같은 메서드를 사용한다는 것은 운이 좋았던 것입니다 그리고 기능이. 이것은 표준에 의해 보장되지 않습니다. –