gelldur / EventBus

A lightweight and very fast event bus / event framework for C++17
Apache License 2.0
370 stars 81 forks source link

Compilation issue when using std::future #47

Open gelldur opened 1 year ago

gelldur commented 1 year ago
/home/X/.cache/X/prebuild/X/install-Debug/include/dexode/eventbus/Bus.hpp:82:23: error: no matching function for call to 'create'
                auto postponeCall = PostponeHelper::create<Event>(std::move(event));
                                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/home/X/Project/X/X/src/backend/BackendApplication.cpp:124:14: note: in instantiation of function template specialization 'dexode::eventbus::Bus::postpone<event::backend::XYZ>' requested here
                                        guiBus->postpone(event::backend::XYZ{
                                                ^
/home/X/.cache/X/prebuild/X/install-Debug/include/dexode/eventbus/Bus.hpp:54:24: note: candidate function template not viable: no known conversion from 'typename std::remove_reference<XYZ &>::type' (aka 'event::backend::XYZ') to 'std::any' for 1st argument
        static PostponeHelper create(std::any&& event)

Example:

    guiBus->postpone(event::backend::XYZ{
        "text",
        std::async(std::launch::deferred, [state]() { return state->state(); })})

I would expect either working or more clear compile error. Maybe everything is ok but should work I guess...

gelldur commented 1 year ago

Ok issue is in unclear compilation error this is reason:

error: call to implicitly-deleted copy constructor of 'event::backend::XYZ'
gelldur commented 1 year ago

Notes:

  1. Event state can't be mutable. Interesting use case when we would like to "cache" result of deferred async task. Need to write wrapper for such future?
panmaksym commented 1 year ago

Is this problem solved? If not, I could look at it, it would be interesting to understand

gelldur commented 1 year ago

Yeah still valid issue. Not sure what correct solution would be as mentioned above of mutable state of event.