> 백엔드 개발 > C++ > C에서 멤버 함수 포인터를 어떻게 올바르게 전달할 수 있습니까?

C에서 멤버 함수 포인터를 어떻게 올바르게 전달할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-05 08:52:10
원래의
271명이 탐색했습니다.

How Can I Correctly Pass Member Function Pointers in C  ?

C에서 멤버 함수 포인터 전달

객체 지향 프로그래밍에서는 멤버 함수를 다른 함수에 인수로 전달해야 하는 경우가 많습니다. 그러나 이 작업을 올바르게 수행하는 것은 다소 까다로울 수 있으며, 특히 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿