我正在尝试使用指针创建boost::function
的副本,并使用该指针调用该函数。我的问题是
boost::function
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
答案 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。