0

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

  1. 以这种方式克隆boost::function是正确的
  2. 调用是否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 回答