객체 지향 프로그래밍에서는 멤버 함수를 다른 함수에 인수로 전달해야 하는 경우가 많습니다. 그러나 이 작업을 올바르게 수행하는 것은 다소 까다로울 수 있으며, 특히 this 포인터를 사용할 때 더욱 그렇습니다.
제공된 코드 조각의 특정 예를 고려해 보겠습니다.
class testMenu : public MenuScreen { // ... void test2() { draw = true; } }; MenuButton<testMenu> x; testMenu() : MenuScreen("testMenu") { x.SetButton(100, 100, ..., &test2); }
여기서 test2 멤버 함수는 SetButton 함수를 사용하여 MenuButton의 ButtonFunc 멤버에 할당됩니다.
template <class object> void MenuButton::SetButton(..., void (object::*ButtonFunc)()) { this->ButtonFunc = &ButtonFunc; }
이 문제는 MenuButton 클래스의 test2 함수입니다. 이를 위해서는 객체에 대한 포인터(예: testMenu)와 함수에 대한 포인터(예: &test2)가 모두 필요합니다. 수정된 SetButton 버전에서는
template <class object> void MenuButton::SetButton(..., object *ButtonObj, void (object::*ButtonFunc)()) { this->ButtonObj = ButtonObj; this->ButtonFunc = ButtonFunc; }
ButtonObj 포인터를 사용하여 액세스할 수 있는 개체에 대한 참조를 전달합니다. 그런 다음 멤버 함수 포인터는 ((ButtonObj)->*(ButtonFunc))()를 사용하여 호출됩니다.
마지막으로 수정된 testMenu 생성자:
testMenu() : MenuScreen("testMenu") { x.SetButton(100, 100, ..., this, &test2); }
위 내용은 C에서 멤버 함수 포인터를 어떻게 올바르게 전달할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!