おそらく恥ずかしいほど単純な問題があります。クラスでメンバー関数を渡し、呼び出します。BOOST バインド (およびまたは関数) を使用したいのはわかっていますが、その概念はまだよく理解していません。
次のコードは、問題を抱えてコンパイルおよび実行されます。しかし、「f3」関数を非静的クラス関数に変更したい場合は、楽しみが始まります。
#include <iostream>
#include <inttypes.h>
#include <boost/bind.hpp>
#include <boost/function.hpp>
class Test
{
public:
void f1();
private:
void f2(void (*callfunc)(uint32_t));
static void f3(uint32_t x);
};
void Test::f1(){
f2(f3);
}
void Test::f2(void (*callfunc)(uint32_t)){
(*callfunc)(42);
}
void Test::f3(uint32_t x){
std::cout << "x: " << x << std::endl;
}
int main(int argc, char ** argv)
{
Test ct;
ct.f1();
return 0;
}
さて、変更後
static void f3(uint32_t x);
に
void f3(uint32_t x);
コンパイラは満足せず、「エラー: 'Test::f2()' の呼び出しに一致する関数がありません」と通知します。
boost::bind および boost::function に関する多くの SO 投稿を読んだ後、f2() の定義と、f1() が f2() を呼び出して、f3() を呼び出すターゲットとして指定する方法を変更する必要があると思いますが、それとは別に...私が試したboost::bindとboost関数のすべての組み合わせは、惨めにコンパイルに失敗しました。
これをどのように書く必要がありますか?おまけの質問として、boost::bind と boost::function に関する簡単な入門書はありますか? BOOST のドキュメントはあまり役に立ちませんでした。
B.