ホームページ >バックエンド開発 >C++ >C でクラスメンバー関数ポインタを外部関数に渡すにはどうすればよいですか?

C でクラスメンバー関数ポインタを外部関数に渡すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-03 19:19:10729ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。