2012-03-09 8 views
0

boost::functionのコピーを作成し、そのポインタを使用してその関数を呼び出そうとしています。私の質問はboost::functionをクローニングboost :: functionをポインタに複製し、そのポインタでラップされた関数を呼び出す

  1. される方法が
  2. 正しいものですfp->target()への呼び出しは、関数は、ブースト::関数によって を包ん呼び出すか、ではないでしょうか?

どうもありがとう

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 
+2

なぜ、オハイオ州*なぜ*あなたは 'new'コピーを取って? *一つ*分かりやすい理由を教えてください。 – Xeo

答えて

2

boost :: functionがコピーコンストラクタを提供する場合、この場合はfのすべての生涯の問題を処理すると見なすことができます(そうでなければ、それは提供されません。彼らのバジルに)。

​​

やポスター前述のように:

fp->operator(); 

は何をする意味していることで、単に機能です

(*fp)(); 
1

は、このコードを見て、私はそれはあなたが何をしたいかだと思う:

GCCでコンパイル
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)(); 
} 

、それがうまく機能し、私が見ることができますcout。

関連する問題