2016-07-10 15 views
1

나는 C++에 대해 반응적인 학습을하고 있으며 몇 가지 지침을 찾고있다. 이벤트를 기다렸다가 반환하는 함수를 만들었습니다. 나는 반응적인 비동기로 발생하는 모든 이벤트를 포착하여 그들이 올 때 처리하도록하고 싶다. 여기에 지금까지 무엇을 없다 :함수에서 RXcpp 스트림 데이터가 연속적으로

int Engine::Initialize() 
{ 
    al_init(); 

    display = al_create_display(1200, 800); 

    eventQueue = al_create_event_queue(); 

    al_install_mouse(); 
    al_install_keyboard(); 

    al_register_event_source(eventQueue, al_get_keyboard_event_source()); 
    al_register_event_source(eventQueue, al_get_mouse_event_source()); 

//test: wait for 2 events to happen 
    auto events = rxcpp::observable<>::create([](rxcpp::subscriber<ALLEGRO_EVENT> e) 
    { 
     e.on_next(WaitForEvent); 
     e.on_next(WaitForEvent); 
     e.on_completed(); 
    }); 

    events.subscribe([](ALLEGRO_EVENT e) 
    { 
     printf("We have an Event: %d \n", e.type); 
    }, 

    []() 
    { 
     printf("Done\n"); 
    }); 

    return 0; 
} 

ALLEGRO_EVENT Engine::WaitForEvent() 
{ 
    ALLEGRO_EVENT event; 

    al_wait_for_event(eventQueue, &event); 

    return event; 
} 

나는 오류를 얻을 수가 : 함수 템플릿의 더 예 "rxcpp :: 관찰 :: 만들 수는"인수 목록 일치합니다. ALLEGRO_EVENT을 (를) 관찰 할 수 있도록 내 자신 만의 템플릿이나 무언가를 만들어야합니까?

답변

0

the docs에서 create은 반환 형식에 명시적인 템플릿 매개 변수를 사용하므로 제공해야합니다. 청취자가 아무것도 반환하지 않으므로 void이 작동합니다.

auto events = rxcpp::observable<>::create<void>(... 
+0

에 결과를 전달해야합니다 ALLEGRO_EVENT을 기대하고있다 "rxcpp :: 관찰 함수 템플릿없이 인스턴스를 : : create "는 인수 목록 – shady

+0

과 일치합니다. 왜냐하면 그 문서에서 샘플을 붙여 넣을 때 같은 것을 말하기 때문입니다. – shady

+0

흠. 그건 이상 하네. 버그 일 수 있습니다. 불행히도이 라이브러리를 사용한 경험이 없습니다. 그들의 [토론 포럼] (http://rxcpp.codeplex.com/discussions)에 게시하는 것이 좋습니다. – Tim

0

@tim이 올바른 아이디어를 가졌습니다.

나는 on_next()에 전달됩니다 유형을 알고 우리의 discussion

create<>() 요구에서 대답을 게시하고있다. 또한 , WaitForEvent 함수이지만, on_next() 그래서 지금은이 오류 얻을 WaitForEvent()를 호출하고 on_next()

auto events = rxcpp::observable<>::create<ALLEGRO_EVENT>([this](rxcpp::subscriber<ALLEGRO_EVENT> e) 
{ 
    e.on_next(this->WaitForEvent()); 
    e.on_next(this->WaitForEvent()); 
    e.on_completed(); 
});