メンバー関数へのポインターは、動的バインディングの柔軟性を提供しながら、特定のメンバー関数を保存および実行する便利な方法を提供します。ただし、これらの関数ポインターの呼び出しには、独自の構文があります。
非静的メンバー関数の場合、関数ポインターを呼び出すには、名前付きパラメーターと、関数ポインターが含まれるオブジェクトを表す this ポインターの両方を指定する必要があります。関数が呼び出されます。次の修正されたコードは、正しい構文を示しています。
typedef void (Box::*HitTest)(int x, int y, int w, int h); for (std::list::<HitTest>::const_iterator i = hitTestList.begin(); i != hitTestList.end(); ++i) { HitTest h = *i; (box->*h)(xPos, yPos, width, height); }
ここで、box は、this ポインターとして機能する Box オブジェクトへのポインターです。 box->*h を使用すると、基本的に、box が指す特定の Box インスタンスでメンバー関数 h を呼び出します。
リストへのメンバー関数の追加に関して、修正されたコードは次のようになります。
std::list<HitTest> list; for (std::list<Box*>::const_iterator i = boxList.begin(); i != boxList.end(); ++i) { Box* box = *i; list.push_back(&Box::HitTest); }
以上がC でメンバー関数へのポインターを正しく呼び出す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。