1. ホーム
  2. c++

[解決済み] クラスのメンバ関数をコールバックとして渡すにはどうすればよいですか?

2023-05-19 12:51:23

質問

コールバックとして関数ポインタを渡す必要があるAPIを使用しています。私は私のクラスからこのAPIを使用しようとしていますが、私はコンパイルエラーが発生します。

以下は、私がコンストラクタから行ったことです。

m_cRedundencyManager->Init(this->RedundencyManagerCallBack);

これはコンパイルされません - 私は、次のエラーが発生します。

エラー 8 エラー C3867: CLoggersInfra::RedundencyManagerCallBack': function call missing argument list; use '&CLoggersInfra::RedundencyManagerCallBack' to create a pointer to member.

を使うという提案を試してみました。 &CLoggersInfra::RedundencyManagerCallBack - を使うという提案を試しましたが、私にはうまくいきませんでした。

このための任意の提案/説明?

VS2008を使用しています。

ありがとうございました!!。

どのように解決するのですか?

メンバ関数ポインタは、"this"オブジェクト引数を期待するため、通常の関数ポインタと同様に扱うことができないため、うまくいきません。

代わりに、以下のように静的メンバ関数を渡すことができます。この点では、通常の非メンバ関数と同じです。

m_cRedundencyManager->Init(&CLoggersInfra::Callback, this);

この関数は次のように定義することができます。

static void Callback(int other_arg, void * this_pointer) {
    CLoggersInfra * self = static_cast<CLoggersInfra*>(this_pointer);
    self->RedundencyManagerCallBack(other_arg);
}