C クラスのメンバー関数を C コールバック関数として登録する
コールバック関数を必要とする C ライブラリを操作する場合、登録が必要になる場合があります。 C クラスのメンバー関数。ただし、非静的メンバー関数をコールバックとして登録しようとすると、コンパイラ エラーが発生します。
C クラス メンバー関数を登録できますか?
はい、可能です。静的メンバー関数を使用して、C クラスのメンバー関数をコールバック関数として登録できます。
静的メンバー関数アプローチ
静的メンバー関数には、クラス型の暗黙的な最初のパラメーターがありません。したがって、それらの署名はコールバック関数の予期されるタイプと一致し、正常に登録できます。
例
class A { public: static int e(int *k, int *j) { return 0; } }; A::A() { register_with_library(A::e); }
代替アプローチ
int e(int *k, int *j) { A a; return a.e(k, j); } A::A() { register_with_library(e); }
struct EF { A* a; int operator()(int *k, int *j) { return a->e(k, j); } }; A::A() { EF ef = {this}; register_with_library(ef); }
アプローチの選択は、C ライブラリの特定の要件と、必要なカプセル化と再利用性のレベルによって異なります。
以上がC クラスのメンバー関数を C コールバックとして登録するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。