【发布时间】:2015-12-02 01:52:07
【问题描述】:
我一直在尝试更多关于 C++ 中的多线程编程,但我很难理解 std::promise 所以我开始在这个网站上寻找答案,并且瞧,有人和我有同样的问题。但是看了答案让我更加困惑
这是答案中的代码,大概是std::packaged_task的类似实现
template <typename> class my_task;
template <typename R, typename ...Args>
class my_task<R(Args...)>
{
std::function<R(Args...)> fn;
std::promise<R> pr; // the promise of the result
public:
template <typename ...Ts>
explicit my_task(Ts &&... ts) : fn(std::forward<Ts>(ts)...) { }
template <typename ...Ts>
void operator()(Ts &&... ts)
{
pr.set_value(fn(std::forward<Ts>(ts)...)); // fulfill the promise
}
std::future<R> get_future() { return pr.get_future(); }
// disable copy, default move
};
在这段代码中,
1- 这个语法是什么意思template <typename R, typename ...Args> class my_task<R(Args...)>,更具体地说,<R(Args...)> 的目的是什么?
2- 为什么要对班级进行前向减速?
谢谢
【问题讨论】:
-
哇哇,每个问题一个问题
-
我应该把它分成3个不同的问题吗?它们似乎都密切相关,尤其是 1 和 2
-
是的,我想是的。您在这里有三个非常好的问题的开头,但不应将它们混为一谈,它们也可以通过一些充实和研究来完成。相关不等于相同。
-
我会研究它们,但我不知道要研究什么,我不能在谷歌中准确输入
class template <class R, class …Args> class name<R(Args…)>,它会知道在说什么
标签: c++ multithreading promise variadic-templates packaged-task