メンバー関数をコールバックとして API メソッドに割り当てようとしていますが、以下のエラー メッセージが返されます。これを解決する方法がわかりません。
cannot convert ‘boost::function<int(rcv_t_stct*, msg_t_stct*)>*’ to ‘rcv_cb {aka int (*)(rcv_t_stct*, msg_t_stct*)}’
コールバック署名:
typedef int (*rcv_cb)(rcv_t *rcv, msg_t *msg);
コールバック セッター:
create(rcv_cb cb);
私のメンバー関数:
int receiver::on_received(rcv_t *rcv, msg_t *msg)
{
return 0;
}
セッターに割り当てようとしました:
boost::function<int (rcv_t *, msg_t *)> f2( boost::bind( &receiver::on_received, this, _1, _2) );
create(f2);
解決:
レシーバー クラスをシングルトンに変更し、静的メンバー関数を使用して非静的メンバー関数をラップしました。
int receiver::on_received(rcv_t *rcv, msg_t *msg)
{
return receiver::instance().on_received_private(rcv, msg);
}
これは、この問題を解決するための最善の解決策ですか?