boost::bind(mycallback, this, _1, _2)
Cコード全体で使用できますか?
アップデート
簡単な答えはノーです。ブーストバインドは関数ポインターを返しません。関数ポインターはCコードで呼び出すことができますが、関数(オーバーロードされた演算子を持つC ++オブジェクト()
)は以下の答えを参照してください。
boost::bind(mycallback, this, _1, _2)
Cコード全体で使用できますか?
アップデート
簡単な答えはノーです。ブーストバインドは関数ポインターを返しません。関数ポインターはCコードで呼び出すことができますが、関数(オーバーロードされた演算子を持つC ++オブジェクト()
)は以下の答えを参照してください。
いいえ 。関数ポインタではなくファンクターboost::bind
を返します。返されるオブジェクトはC++オブジェクトであり、オーバーロードされているため、C++コードの関数ポインターのように動作できます。ただし、Cコードに渡すことができる関数ポインタではありません。operator()
やりたいことを行う最良の方法は、Cコールバックを作成して、boost :: functionを呼び出すことです。これは、newを使用してある種のユーザーメモリに格納されます。
例:
void callFunction(void* data)
{
boost::function<void(void)> *func = (boost::function<void(void)>* ) (data);
(*func)();
delete(func);
}
次に、このコールバックを渡し、ユーザーデータ(ただし、libevで指定されている)をnewで割り当てられた関数のコピーに設定します。
これは、libevでユーザーデータを指定する方法です。http://pod.tst.eu/http: //cvs.schmorp.de/libev/ev.pod#ASSOCIATING_CUSTOM_DATA_WITH_A_WATCH
boost::bind
Cライブラリのコールバック関数として返されるものを使用したいと思いますか?
その場合、いいえ、それは機能しません。boost::bind
関数ポインタを返さないため、ビルドすらしません。