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。これは 2 つの引数を取るためです。したがって、関数オブジェクトを 2 つの引数を取るオブジェクトに変換する必要があります。

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

(未検証...)

于 2012-10-23T22:40:36.463 に答える