5

boost::bind(mycallback, this, _1, _2)Cコード全体で使用できますか?

アップデート

簡単な答えはノーです。ブーストバインドは関数ポインターを返しません。関数ポインターはCコードで呼び出すことができますが、関数(オーバーロードされた演算子を持つC ++オブジェクト())は以下の答えを参照してください。

4

3 に答える 3

4

いいえ 。関数ポインタではなくファンクターboost::bindを返します。返されるオブジェクトはC++オブジェクトであり、オーバーロードされているため、C++コードの関数ポインターのように動作できます。ただし、Cコードに渡すことができる関数ポインタではありません。operator()

于 2011-11-27T00:07:44.203 に答える
4

やりたいことを行う最良の方法は、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

于 2011-11-27T00:15:22.843 に答える
2

boost::bindCライブラリのコールバック関数として返されるものを使用したいと思いますか?

その場合、いいえ、それは機能しません。boost::bind関数ポインタを返さないため、ビルドすらしません。

于 2011-11-27T00:06:32.397 に答える