2011-11-09 13 views
0

クラスA、クラスBの関数でクラスBブースト

へのアクセスを、私はクラスBの引数をクラスAに定義された関数を呼び出し、それに渡すたい有しますクラスAI中のSO

がクラスBにクラスBでは

A::provideFunction 
{ 
    boost::function<void()> f = boost::bind(&A::Foo,this,boost::ref(&B::_param1,B::instance()),boost::ref(&B::_param2,B::instance()))); 
    B::instance()->provideFunction(f); 
} 

を所望の機能を提供するために、次のように記述してみてください、私は関数を呼び出す:

B::callFunction() 
{ 
    _param1 = "A"; 
    _param2 = "B"; 
    _f(); 
} 

私が持っている問題は、boost:refは1つの引数しか期待していません...このissuを解決するには何ができますか?

答えて

1

データメンバーへのポインタを取得するには、&T::fooを実行しないでください。&obj->fooを実行してください。参照ラッパーを取得するには、ref(obj->foo)

B* b = B::instance(); 
boost::function<void()> f = boost::bind(
    &A::Foo, this, boost::ref(b->_param1), boost::ref(b->_param2) 
); 
b->provideFunction(f); 

また、デザインを考え直してください。シングルトンも、この奇妙な暗黙の暗黙の引数も良いものではありません。

+0

答えはありがたいですが、デザインはAはCView、Bはドロップダウンコンソールです。コマンドラインからAの関数を呼び出したいと思っています。これを実装する方法 – Smash