我正在学习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的东西?
答案 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();
});