以下代码抛出异常
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_function_call> >'
what(): call to empty boost::function
在行f()
(在执行块时):
void foo(); // assume this is defined somewhere
boost::function<void()> f = boost::bind(&foo);
^(void) {
f();
}();
但是,根据有关 blocks 的文档,
通常,您可以在块中使用 C++ 对象。在成员函数中,对成员变量和函数的引用是通过隐式导入的 this 指针进行的,因此看起来是可变的。如果复制块,有两个注意事项:
如果您有一个 __block 存储类来存储基于堆栈的 C++ 对象,则使用通常的复制构造函数。
如果您在块中使用任何其他基于 C++ 堆栈的对象,则它必须具有 const 复制构造函数。然后使用该构造函数复制 C++ 对象。
通常这似乎是正确的;如果我将f
上面替换为带有 的简单类的实例operator()()
,则上面的代码将按预期运行。
为什么版本不boost::function
工作?