【发布时间】:2013-04-23 00:43:40
【问题描述】:
我正在尝试围绕 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();
我现在需要从这个任务中创建一个std::packaged_task<void()> 以将它们放入一个 std::queue 以便连接到 Glib::Dispatcher 的函数可以执行它们。
我的问题是:如何通过两个步骤从std::packaged_task<R()> 和std::packaged_task<void()> 创建,以便我可以从第一个任务返回它的未来并将第二个任务放入std::queue<std::packaged_task<void()>> 类型的队列中?
【问题讨论】:
-
也可以是其他函子类型,而不是
std::packaged_task<void()>;他们都只需要隐藏f和args...。 -
我找到了一种使用类型擦除来实现的方法,但是有什么方法可以使用 stl 来解决我的问题吗?
标签: c++ thread-safety packaged-task