ホームページ >バックエンド開発 >C++ >C クラスのメンバー関数を C コールバックとして使用できますか?

C クラスのメンバー関数を C コールバックとして使用できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 07:36:14553ブラウズ

Can C   Class Member Functions Be Used as C Callbacks?

C クラスのメンバー関数を C コールバック関数として使用する

問題:

の場合C クラスのメンバー関数を C ライブラリのコールバック関数として登録しようとすると、コンパイラは次のことを示すエラーをスローします。関数の型が予期された署名と一致しません。

質問:

  1. C クラスのメンバー関数をコールバック関数として登録することは可能ですか?
  2. これを解決する別のアプローチはありますか問題は?

答え:

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.代替アプローチ:

または、次のいずれかのアプローチを使用できます:

  • 無料関数を作成します: 適切な関数を使用して無料関数を作成します。シグネチャを作成し、その中から C クラスのメンバー関数を呼び出します。例:
void e_wrapper(int *k, int *j) {
    A().e(k, j);
}
  • 関数ポインターを使用する: 関数ポインターを定義し、それに C クラスのメンバー関数のアドレスを割り当てます。例:
int (*ptr)(int *, int *) = &A::e;
register_with_library(ptr);

以上がC クラスのメンバー関数を C コールバックとして使用できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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