0

ポインタを使用してのコピーを作成し、boost::functionそのポインタを使用してその関数を呼び出そうとしています。私の質問は

  1. そのようにクローンを作成するのboost::functionは正しいことです
  2. toの呼び出しfp->target()は、boost :: functionでラップされた関数を呼び出すかどうかを指定しますか?

どうもありがとう

  boost::function<void()> f = boost::bind(&my_f,my_value);
  boost::function<void()> fp* = new boost::function<void()>( f ); // clone f

  typedef void(*fptr_type)();
  fp->target<fptr_type>();  // doesn't work! Is this correct?

  fp->operator(); // doesn't compile
                  //=>error: statement cannot resolve address of overloaded function
4

2 に答える 2

2

boost :: functionがコピーコンストラクターを提供する場合、それが機能し、この場合のfのすべてのライフタイムの問題を処理すると想定できます(そうでない場合は提供されないため、bugzillaにバグレポートを提出する必要があります) 。

fp->operator();

単なる関数です。あなたがやろうとしていることは次のとおりです。

fp->operator()();

または上記のポスターのように:

(*fp)();
于 2012-03-09T12:35:12.413 に答える
1

このコードを見てください、私はそれがあなたがやりたいことだと思います:

void my_f(void)
{
    cout << "hello";
}

int main(void){

  boost::function<void()> f = boost::bind(&my_f);
  boost::function<void()>* fp = new boost::function<void()>( f ); 

  typedef void(*fptr_type)();
  fp->target<fptr_type>(); 

  (*fp)();
}

GCCでコンパイルされ、それはうまく機能し、私はcoutを見ることができます。

于 2012-03-09T11:25:46.673 に答える