2013-11-21 4 views
1

나는 boost :: signals2를 사용하여 특정 조건에서 이벤트를 실행하는 신호를 사용하는 클래스를 생성합니다. 이 클래스에는 RegisterCallback이라는 메서드가 있습니다.부스트 :: signals2 - 인수로 신호 슬롯을 전달

이 함수는 신호의 사용 (단 ARG 같은 이중 으로 보이드 복귀 형이다) 슬롯 형태의 매개 변수를 사용한다.

그러나 signal1 클래스의 소스 파일이 꽤 읽을 수 없기 때문에 메서드 서명에서이 인수를 어떻게 정의해야하는지 잘 모르겠습니다.

그래서 나는 기본적으로이 작업을 수행 할 수 : 여기

myTimer(interval); 
myTimer.RegisterCallback(&aCallbackFunction); 

이 멤버 신호 :

boost::signals2::signal<void (double)> m_signal; 

... 그리고 여기 (uncomplete) 내가 필요한 레지스터 방법

입니다
/** 
    * Register a callback function that will be called when the timer interval elapses. 
    */ 
    void RegisterCallback(const boost::signals2::signal1<???????> &slot) 
    { 
     m_signal.connect(slot); 
    } 

답변

2

boost :: function 및 boost :: bind 라이브러리를 사용할 수도 있습니다.

typedef booost::signals2::signal(void (double)>::slot_type CallbackSlot 
void RegisterCallback(CallbackSlot slot) 
{ 
    m_signal.connect(slot); 
} 

// ... 

class MyClass {void handler(double);} 

// ... 

RegisterCallback(boost::bind(MyClass::handler, this, _1)); 

boost :: function 및 boost :: bind 설명서를 읽고 신호 2를 사용하는 것이 좋습니다. 이 예제 코드는 테스트되지 않았지만 문제를 해결하는 데 필요한 모든 요소가 포함되어 있습니다.

+0

그 솔루션은 정말 잘 작동. 그것에 대해 조금 더 읽고는, 그러나 경이를 일했다. 감사 –