我一直在尝试了解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- 为什么需要对该类进行前向声明?
谢谢。