c++ - Boost::bind 'Call to empty boost::function' 仅当未在构造函数中设置时才会失败

标签 c++ boost

为什么除非从类的构造函数中调用,否则使用以下方法可能会失败?

    updateState = boost::bind( &PhysicsObject::updateActive, this );

但是下面的代码在运行时会失败,并出现“what(): call to empty boost::function”异常

void PhysicsObject::setState( PhsyicsObjectState aState ) {
_state = aState;

if( _state == ACTIVE ) { // This branch is executed
    updateState = boost::bind( &PhysicsObject::updateActive, this );
} else {
    updateState = boost::bind( &PhysicsObject::updateExploding, *this );
}
}

最佳答案

调用未设置的 boost::function 会引发此类异常。您应该根据默认的“状态”在构造函数中对其进行初始化,否则如果传递的状态与当前状态相同,您的 setState 将不会设置它。

请注意,在您的第二个绑定(bind)中,您传递的是 this 指向的对象的拷贝

关于c++ - Boost::bind 'Call to empty boost::function' 仅当未在构造函数中设置时才会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7870600/

相关文章:

c++ - 解引用迭代器作为 boost::bind 复合链的一部分

c++ - 如何将参数传递给工厂元素构造函数?

C++ Boost 库链接器找不到,不会编译

c++ - 在处理之前评估宏参数

c++ - OpenCV 直方图匹配/规范

c++ - 布局在 Qt 中不起作用

c++ - 我可以在 C++ 中自动调用对象声明类的方法吗?

c++ - fstream 库,试图创建一个具有变量名的文件 (c++)

c++ - 从并发析构函数停止 boost::asio::io_service::run()

c++ - boost 多精度整数的类型特征