クラス メンバー関数をコールバックとして渡すときのコンパイル エラーを解決する
クラス メンバー関数をコールバックとして渡すときに、誤解が原因でコンパイル エラーが発生する構文と member の非表示の "this" パラメータについてfunction.
メンバー関数の明確化
メンバー関数はスタンドアロン関数ではなく、追加の非表示の「this」ポインターを持つ関数です。このポインタは、関数が属するクラスのインスタンスを参照します。クラス インスタンス構文 (object.memberFunction() など) を使用してメンバー関数を呼び出す場合、コンパイラは "this" の値を自動的に決定します。
構文難題
&CLoggersInfra::RedundencyManagerCallBack をコールバックとして渡そうとしたため、最初のアプローチは失敗しました。この関数ポインタには、必要な「this」ポインタがありません。正しい構文は次のとおりです。
m_cRedundencyManager->Init(std::bind(&CLoggersInfra::RedundencyManagerCallBack, this));
非表示の "this" を明らかにする
CLoggersInfra クラスの特定のインスタンスに固有のコールバックを渡したいとします。非表示の「this」ポインターを考慮するには、それを明示的にバインドする必要があります。
std::bind1st および boost::bind Rescue
Use std::bind1stまたは、boost::bind で「this」ポインタをバインドし、インスタンスを隠しパラメータとコールバックの元のパラメータとして受け取る新しい関数を作成します いつものように。これにより、コンパイルの問題が解決されます。
Hidden Catch
Init には生の関数ポインターが必要ですが、boost::bind ではそのままでは提供されません。ただし、StackOverflow は、boost::functions を生のポインターに変換するソリューションを提供します。
Lambda 関数による C 11 の更新
C 11 以降では、キャプチャする lambda 関数が使用されます。この目的のために、「this」を boost::bind に置き換えることができます。
以上がC でクラス メンバー関数をコールバックとして正しく渡す方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。