コンポーネントにboost::signals2::signals
、UpdateComponent
を使用しています。このコンポーネントの特定の集合体は、タイプUpdateable
です。私はUpdateable
をUpdateComponent
のboost::signals2::signal
に接続できるようにしたいと思います。 Updateable
のslot
はpure-virtual
です。以下純粋な仮想関数にboost :: signal2 ::信号を接続するには?
コードの具体例である:
// This is the component that emits a boost::signals2::signal.
class UpdateComponent {
public:
UpdateComponent();
boost::signals2::signal<void (float)> onUpdate; // boost::signals2::signal
}
UpdateComponent
のコードのある時点で、私はonUpdate(myFloat)
を行います。これは、すべての "リスナー"にboost::signals2::signal
を "発射"するのと同じだと思います。 Updateable
のコンストラクタで
// The is the aggregate that should listen to UpdateComponent's boost::signals2::signal
class Updateable {
public:
Updateable();
protected:
virtual void onUpdate(float deltaTime) = 0; // This is the pure-virtual slot that listens to UpdateComponent.
UpdateComponent* m_updateComponent;
}
、私は次の操作を行います
...Updateable.cpp:8: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&BalaurEngine::Traits::Updateable::onUpdate' [-fpermissive]
/usr/include/boost/function/function_template.hpp:225: error: no match for call to '(boost::_mfi::mf1<void, BalaurEngine::Traits::Updateable, float>) (float&)'
Updateable::Updateable {
m_updateComponent = new UpdateComponent();
m_updateComponent->onUpdate.connect(&onUpdate);
}
私は、次の2つのエラーを受け取ります
私はboostと組み合わせてQtを使っています。しかし、CONFIG += no_keywords
を私の.pro
ファイルに追加しました。そのため、2つは、ブーストWebサイトで概説されているように、スムーズに連携する必要があります。私がQtのsignals
とslots
(これはうまくいきます)を使用しない理由は、Updateable
をQObject
にしたくないからです。
誰かが私がなぜエラーになっているのか理解してもらえれば、非常に感謝しています!
私はシグナルとスロットのためにブーストを使用していないので、私は具体的な例を与えることはできませんが、私は、問題があることを伝えることができます静的でないメンバ関数に接続しようとしているため、暗黙的にオブジェクトへのポインタをパラメータとして受け取ります。グーグル表示は、これを行う方法として 'boost :: bind'を使用することを示しています。 – tmpearce
ありがとう、tmpearce。以下にirobotが言ったように、これが私の問題の原因です。 – Alex