1

编码:

class Base{
  enum eventTypes{ EVENT_SHOW };
  std::map<int, boost::function<bool(int,int)> > m_validate;
  virtual void buildCallbacks();
  bool shouldShowEvent(int x, int y);
};
void Base::buildCallbacks(){
   m_validate[ EVENT_SHOW ] = boost::bind(&Base::shouldShowEvent,this);
}

我收到以下错误:

 In base.cxx
  return (p->*f_);
  Error: a pointer to a bound function may only be used to call
      the function (boundfuncalled)

我得到了错误的意思,除了调用有界成员函数之外,我不能做任何其他事情,但是我该如何规避这个问题呢?我不确定为什么这不起作用。

4

1 回答 1

5
m_validate[ EVENT_SHOW ] = boost::bind(&Base::shouldShowEvent,this);

调用bind()产生一个不带参数的函数对象。您不能使用这样的对象来调用Base::shouldShowEvent,因为它需要两个参数。所以你必须把函数对象变成一个接受两个参数的对象:

m_validate[ EVENT_SHOW ] = boost::bind(&Base::shouldShowEvent,this, _1, _2);

(未测试...)

于 2012-10-23T22:40:36.463 回答