2016-07-10 48 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

現在我得到這個錯誤:沒有函數模板實例「rxcpp ::觀察到: :創建「匹配參數列表 – shady

+0

其奇怪,因爲當我從文檔中粘貼示例它說的是相同的東西 – shady

+0

嗯。這很奇怪。這可能是一個錯誤。不幸的是,我沒有任何使用這個庫的經驗。我會推薦在他們的[討論論壇]上發帖(http://rxcpp.codeplex.com/discussions)。 – Tim

0

@tim有正確的想法。

我從我們的discussion

create<>()需要張貼的答案,知道將被傳遞到on_next()類型。 此外,WaitForEvent是一個函數,但on_next()期待ALLEGRO_EVENT所以請確保調用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(); 
});