C++에서 간단한 GUI 구성 요소를 구현하려고합니다. 'Button'클래스는 주 프로그램에서 완전히 분리 된 라이브러리에 있습니다. 나는 클릭시 실행할 수있는 버튼에 함수 포인터를 전달할 수 있기를 원합니다.C++ 멤버 함수 콜백 버튼 구현
가독성과 확장 성을 위해 구조체에서 '버튼'을 옮길 때까지 약간의 성공을 거두었습니다. 나는 매우 무작위적인 문제를 겪었으므로 그것은 단지 순수한 기회에 의해서만 작용했다고 생각한다. BaseMenu를 서브 클래스 내 수업에서
typedef void(BaseMenu::*ClickAreaCallback)(Button*);
struct Message{
ClickAreaCallback func;
Button* clickArea;
BaseMenu* funObj;
};
(가), 나 같은 것을 할 :
cb = (ButtonContainer::ClickAreaCallback)&TileSelectorScreen::setTileMode;
및 설정 :
ClickAreaCallback to &cb (as well as funObj)
I
나는 기본적으로 이런 일이 다음을 수행하여 '클릭'시 실행하십시오 :
m->funObj->*m->func)(m->clickArea);
정적 인 멤버 함수를 전달하고 실행하려고 할 때 문제가 있다는 것은 분명히 잘못되었습니다.
그래서 내가 할 수없는 일이 무엇입니까? 부스트를 사용하지 않거나 -std = C++ 11을 사용하지 않고 일반 C++을 사용하여 원하는 것이 무엇입니까? 나는 많은 기초를 가지고 여전히 컴파일 할 수 있도록 자신을 제한적으로 제한하고있다.
간단히 말해서 나는 호출하는 클래스를 모르는 클래스에서 함수를 호출하는 간단한 방법을 원합니다. 사전에
감사합니다.
캐스팅 함수 포인터는 결코 어떤 문제에 대한 해결책이 아닙니다. 하지 마. – molbdnilo
나는 이것을 알고 올바른 이유가 무엇인지 묻고있다. 의견 있으십니까? – user2452192