#include<iostream>
#include<functional>
#include<type_traits>
template<typename T>
class Task;
template<typename R, typename... Args>
class Task<R(Args...)>
{
public:
Task(std::function<R(Args...)>&& f):m_fn(std::move(f)){}
Task(std::function<R(Args...)>& f):m_fn(f){}
R Run(Args&&... args)
{
return m_fn(std::forward<Args>(args)...); //完美转发
}
//连续调用新的函数,将函数不断地串联起来
template<typename F>
auto Then(F&& f)->Task<typename std::result_of<F(R)>::type(Args...)>
{
using return_type = typename std::result_of<F(R)>::type; //result_of获取F的返回类型
std::function<R(A
#include<functional>
#include<type_traits>
template<typename T>
class Task;
template<typename R, typename... Args>
class Task<R(Args...)>
{
public:
Task(std::function<R(Args...)>&& f):m_fn(std::move(f)){}
Task(std::function<R(Args...)>& f):m_fn(f){}
R Run(Args&&... args)
{
return m_fn(std::forward<Args>(args)...); //完美转发
}
//连续调用新的函数,将函数不断地串联起来
template<typename F>
auto Then(F&& f)->Task<typename std::result_of<F(R)>::type(Args...)>
{
using return_type = typename std::result_of<F(R)>::type; //result_of获取F的返回类型
std::function<R(A