2016-07-10 52 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(); 
});