>백엔드 개발 >C++ >C의 외부 함수에 클래스 멤버 함수 포인터를 어떻게 전달할 수 있습니까?

C의 외부 함수에 클래스 멤버 함수 포인터를 어떻게 전달할 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-03 19:19:10730검색

How Can I Pass a Class Member Function Pointer to an External Function in C  ?

클래스 객체로 멤버 함수 포인터 전달

클래스 내의 멤버 함수를 멤버 함수가 필요한 외부 함수에 전달하려고 할 때 포인터를 사용하려면 필요한 단계를 이해하는 것이 중요합니다. 이 문서에서는 클래스 멤버 함수가 별도 클래스의 함수에 전달되는 특정 시나리오를 다룹니다.

제공된 코드 내에서 testMenu 클래스에는 test2()라는 멤버 함수와 SetButton을 호출하는 MenuButton이 포함되어 있습니다. (). 문제는 this 포인터를 사용하여 test2() 함수 포인터를 올바르게 전달하는 것입니다.

이 문제를 해결하는 열쇠는 객체에 대한 포인터와 내부의 특정 함수에 대한 포인터를 모두 외부 함수에 제공하는 것입니다. 개체. MenuButton::SetButton()의 수정된 버전에서는:

template <class object>
void MenuButton::SetButton(int xPos, int yPos, LPCWSTR normalFilePath,
        LPCWSTR hoverFilePath, LPCWSTR pressedFilePath,
        int Width, int Height, object *ButtonObj, void (object::*ButtonFunc)())
{
  BUTTON::SetButton(xPos, yPos, normalFilePath, hoverFilePath, pressedFilePath, Width, Height);

  this->ButtonObj = ButtonObj;
  this->ButtonFunc = ButtonFunc;
}

객체 및 함수 포인터가 MenuButton 객체 내에 저장됩니다. 그런 다음 두 포인터를 모두 사용하여 함수를 호출할 수 있습니다.

((ButtonObj)->*(ButtonFunc))();

마지막으로 testMenu 클래스 생성자 내에서 MenuButton을 설정할 때 testMenu 개체에 포인터를 전달하는 것이 중요합니다.

testMenu::testMenu()
:MenuScreen("testMenu")
{
  x.SetButton(100,100,TEXT("buttonNormal.png"), TEXT("buttonHover.png"),
        TEXT("buttonPressed.png"), 100, 40, this, test2);
  draw = false;
}

이러한 수정 사항을 통합하면 멤버 함수 포인터가 성공적으로 전달되어 외부 함수가 testMenu 내에서 원하는 멤버 함수에 액세스하고 실행할 수 있습니다. 수업.

위 내용은 C의 외부 함수에 클래스 멤버 함수 포인터를 어떻게 전달할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.