2011-11-09 2 views
0

클래스 A가 클래스 B의 기능의 클래스에 B.부스트

액세스를, I는 클래스 B.로부터 인수 클래스 A에 정의 된 함수를 호출하고, 그것을 통과하려는 갖는다

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

그래서 수업 시간에 AI는 그냥 전화는이 클래스 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); 
} 

에 원하는 기능을 제공하기 위해 다음과 같은 작성 기능을 시도

내가 가진 문제는 boost : ref는 단 하나의 인수 만 필요합니다.이 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