将boost::函数克隆到指针中,并用该指针调用封装的函数

cloning a boost::function into a pointer and calling the wrapped function with that pointer

本文关键字:函数 指针 调用 封装 boost      更新时间:2023-10-16

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

  1. 以这种方式克隆boost::function是正确的
  2. fp->target()的调用是否应该调用函数包装通过boost::函数

非常感谢

  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

如果boost::function提供了一个复制构造函数,您可以假设它会工作,并在这种情况下处理f的所有生存期问题(否则就不会提供它,您应该提交一份关于其bugzilla的错误报告)。

fp->operator();

只是功能,你想做的是:

fp->operator()();

或者如上海报所示:

(*fp)();

看看这段代码,我想这就是你想要做的:

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。