RXcpp从函数连续流数据

时间:2016-07-10 04:19:21

标签: c++ reactive-programming allegro rxcpp

我正在学习c ++的反应,我正在寻找一些指导。我创建了一个等待事件然后返回它的函数。我想捕获响应异步发生的所有事件,并在它们到来时处理它们。这是我到目前为止所做的:

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 :: observable :: create”匹配参数列表。我是否需要制作自己的模板或能够观察ALLEGRO_EVENT的东西?

2 个答案:

答案 0 :(得分:0)

the docs开始,看起来create使用显式模板参数作为返回类型,因此您需要提供它。你的听众没有回复任何东西,所以void会起作用。

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

答案 1 :(得分: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();
});