我正在尝试围绕 Glib::Dispatcher 构建一些包装器,以将任何功能类型分派到调度程序中。我想要一些函数调度,可以将函数转移到 Glib 主循环中:
template<class Function, class ...Args>
std::future<typename std::result_of<Function(Args...)>::type>
dispatch(Function &&f, Args &&...args);
这个函数将从 f(args) 创建一个打包的任务并返回它的未来:
std::packaged_task<typename std::result_of<Function(Args...)>::type()> task(f(args...));
return task.get_future();
我现在需要从这个任务中创建 astd::packaged_task<void()>
以将它们放入一个 std::queue 中,以便连接到 Glib::Dispatcher 的函数可以执行它们。
我的问题是:如何分两步从 a 创建,以便我可以从第一个任务返回它的未来并将第二个任务放入类型队列std::packaged_task<R()>
中?std::packaged_task<void()>
std::queue<std::packaged_task<void()>>