C クラスのメンバー関数を C コールバック関数として使用する
問題:
の場合C クラスのメンバー関数を C ライブラリのコールバック関数として登録しようとすると、コンパイラは次のことを示すエラーをスローします。関数の型が予期された署名と一致しません。
質問:
答え:
1.静的メンバー関数の使用:
はい、C クラスのメンバー関数をコールバック関数として登録できますが、それは 静的メンバー関数 である必要があります。静的メンバー関数にはクラス A* 型の暗黙の最初のパラメーターがないため、その署名は予期されるコールバック署名と一致します。例:
class A { public: static int e(int *k, int *j) { return 0; } }; int main() { register_with_library(A::e); return 0; }
2.代替アプローチ:
または、次のいずれかのアプローチを使用できます:
void e_wrapper(int *k, int *j) { A().e(k, j); }
int (*ptr)(int *, int *) = &A::e; register_with_library(ptr);
以上がC クラスのメンバー関数を C コールバックとして使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。