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 に答える