1

我正在学习 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?

4

2 回答 2

0

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

auto events = rxcpp::observable<>::create<void>(...
于 2016-07-10T05:55:06.440 回答
0

@tim 有正确的想法。

我正在发布我们讨论的答案

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();
});
于 2016-07-29T03:43:16.820 回答