我正在为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?
发布于 2016-07-10 05:55:06
从医生们来看,create似乎为返回类型使用了一个显式的模板参数,所以您需要提供它。您的侦听器不会返回任何内容,所以void可以工作。
auto events = rxcpp::observable<>::create<void>(...发布于 2016-07-29 03:43:16
@蒂姆的想法是正确的。
我在讨论上发布了答案
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();
});https://stackoverflow.com/questions/38288539
复制相似问题