【问题标题】:Boost::bind 'Call to empty boost::function' fails only if not set in constructorBoost::bind 'Call to empty boost::function' 仅当未在构造函数中设置时才会失败
【发布时间】:2011-10-24 01:37:41
【问题描述】:

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

    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 );
}
}

【问题讨论】:

  • 第二个bind 调用中的*this 看起来很可疑
  • 你说得对,我只是在进去的时候才这样设置的——让我试试这个或那个。

标签: c++ boost


【解决方案1】:

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

请注意,在您的第二次绑定中,您传递的是this 指向的对象的副本

【讨论】:

  • 这永远不会发生,我更新了代码和问题以反映这一点。很抱歉造成混乱。
猜你喜欢
  • 1970-01-01
  • 2016-03-16
  • 2013-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多