首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >源源不断的RXcpp流数据

源源不断的RXcpp流数据
EN

Stack Overflow用户
提问于 2016-07-10 04:19:21
回答 2查看 615关注 0票数 1

我正在为c++学习反应性,并寻求一些指导。我创建了一个函数来等待一个事件,然后返回它。我想捕捉所有发生在反应性异步中的事件,并在它们出现时处理它们。到目前为止,我的情况如下:

代码语言:javascript
复制
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?

EN

回答 2

Stack Overflow用户

发布于 2016-07-10 05:55:06

医生们来看,create似乎为返回类型使用了一个显式的模板参数,所以您需要提供它。您的侦听器不会返回任何内容,所以void可以工作。

代码语言:javascript
复制
auto events = rxcpp::observable<>::create<void>(...
票数 0
EN

Stack Overflow用户

发布于 2016-07-29 03:43:16

@蒂姆的想法是正确的。

我在讨论上发布了答案

create<>()需要知道将传递给on_next()的类型。此外,WaitForEvent是一个函数,但是on_next()需要ALLEGRO_EVENT,所以请确保调用WaitForEvent()并将结果传递给on_next()

代码语言:javascript
复制
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();
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38288539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档