ホームページ >バックエンド開発 >C++ >C クラスのメンバー関数をコールバックとして API に渡すにはどうすればよいですか?

C クラスのメンバー関数をコールバックとして API に渡すにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-24 10:15:37165ブラウズ

How Can I Pass a C   Class Member Function as a Callback to an API?

クラス メンバー関数をコールバックとして渡す

クラス メンバー関数をコールバックとして API に渡そうとすると、コンパイル エラーが発生する可能性があります引数リストが欠落しているためです。この問題を解決するには、クラス インスタンスをキャプチャする関数ポインターまたはラムダ式を使用することをお勧めします。

関数ポインター

エラー メッセージは、'&CLoggersInfra:: の使用を提案しています。 RedundancyManagerCallBack' を使用して、メンバーへのポインターを作成します。これは、クラス メンバー関数が通常 2 つのパラメーターを取るためです。最初のパラメーターはクラス インスタンスへのポインターであり、2 番目のパラメーターは関数の引数です。

void (CLoggersInfra::*ptr)(int); // Function pointer type
ptr = &CLoggersInfra::RedundancyManagerCallBack;

ただし、関数ポインターのアプローチでは次のことが必要です。最初のパラメータを明示的に指定する必要がありますが、これはすべてのシナリオで実用的ではない可能性があります。

ラムダ式 (C 11 および後ほど)

ラムダ式は、クラス インスタンスをキャプチャしてコールバック関数を作成するためのより簡潔で柔軟な方法を提供します。

auto lambda = [this](int arg) { this->RedundancyManagerCallBack(arg); };

このラムダ式は、「this」ポインタをキャプチャし、整数の引数「arg」を取る匿名関数を定義します。次に、ラムダをコールバックとして渡すことができます。

m_cRedundencyManager->Init(lambda);

結論

関数ポインターまたはラムダ式を使用すると、クラス メンバー関数をコールバックとして効率的に渡すことができます。 API 要件を遵守し、コンパイル エラーを回避します。ラムダ式は、クラス インスタンスのキャプチャを簡素化するため、C 11 以降のバージョンで特に便利です。

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

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