私はC言語の関数と呼ばれる持っている:私はこのような関数を呼び出すことができラムダ式などから関数ポインタを取得する方法は?
struct A {
static void CallBack(int i) {
A::count = i;
}
static count = 0;
};
:
f_api(&A::CallBack)
f_api(void(*callback)(int))
を、私は、コールバックのための静的クラスメソッドを持っています
しかし、複数のA
オブジェクトを作成する必要があるため、コールバックを非静的に変更する必要があります。
しかし、f_api()
の定義を変更することはできません。
私はラムダ使用してみました:
f_api([this](int i)->void{this->count = i;})`
をしかし、私は単純な関数ポインタにキャプチャとラムダを変換することはできませんので、これは、失敗しました。
std::bind()
f_api()
の定義のために仕事もできません。
どうすればいいですか?ラムダ式から関数ポインタを取得するにはどうすればよいですか?回避策はありますか?
あなたはすでにラムダを解決策として除外しています。だから、なぜそれについてもう一度尋ねていますか?いずれの場合でも、APIはコールバックにユーザー定義の値を渡すことを許可しますか?もしそうなら、それを使って 'this'ポインタを渡してください。それ以外の場合は、低レベルのサンクを使用せずにSOLになります。 –
あなたができることは何もありません。メンバ関数ポインタから正規関数ポインタを生成するための標準的なツールはありません。コールバックAPIを変更できない場合は、何らかの理由で通常の関数を使用してコールバックをルーティングするしかありません。 – AnT
@SilvioMayoloそれは少し違いがあります。他人を助けるかもしれない解決策を投稿しますが、それは私の役に立たないものです。 –