将boost :: function克隆到指针中并使用该指针调用包装函数

时间:2012-03-09 11:15:04

标签: c++ clone boost-function

我正在尝试使用指针创建boost::function的副本,并使用该指针调用该函数。我的问题是

  1. 以正确的方式克隆boost::function
  2. fp->target()的调用应该调用或不调用函数  通过boost :: function?
  3. 非常感谢

      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 个答案:

答案 0 :(得分:2)

如果boost :: function提供了一个复制构造函数,你可以假设它会工作并在这种情况下处理f的所有生命周期问题(否则它将不会被提供,你应该提交一个bug报告他们的bugzilla)。

fp->operator();

只是功能,你的意思是:

fp->operator()();

或如上面的海报:

(*fp)();

答案 1 :(得分: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。