>백엔드 개발 >C++ >C 멤버 함수 포인터를 올바르게 전달하는 방법은 무엇입니까?

C 멤버 함수 포인터를 올바르게 전달하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-04 04:50:13863검색

How to Pass C   Member Function Pointers Correctly?

C에서 멤버 함수 포인터를 전달하는 방법

멤버 함수 포인터를 허용하는 함수에 클래스 멤버 함수를 전달할 때 필수입니다. 객체에 대한 포인터와 함수에 대한 포인터를 모두 제공합니다.

주어진 예에서 MenuButton::SetButton() 함수에는 특정 서명이 있는 함수 포인터가 필요합니다. 멤버 함수를 전달하려면 개체 포인터(this)와 멤버 함수 포인터를 모두 제공해야 합니다. 이는 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;
}

이제 SetButton() 함수는 개체 포인터와 함수 포인터를 모두 매개 변수로 사용합니다.

In testMenu 클래스에서 멤버 함수는 다음과 같이 전달될 수 있습니다.

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

이는 필요한 객체와 멤버 함수 포인터를 제공합니다. SetButton() 함수를 사용하면 나중에 멤버 함수를 올바르게 호출할 수 있습니다.

위 내용은 C 멤버 함수 포인터를 올바르게 전달하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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