本文主要是介绍C++:实现支持传参的PPL调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
#prama oncetemplate<typename T>
class Task;//偏特化Task
template<typename R,typename... Args>
class Task<R(Args...)>
{
public:using func_type = std::function<R(Args...)>;Task(func_type&& func) : m_fn(std::forward<func_type>(func)){}R Run(Args&&... args){return m_fn(std::forward<Args>(args)...);}//以下是比较难理解的部分,需要递归展开,返回值是一个Task模板类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;auto fn = std::move(m_fn);return Task<return_type(Args...)>([fn,&f](Args&&... args){return f(fn(std::forward<Args>(args)...));});}private:func_type m_fn;
};
这篇关于C++:实现支持传参的PPL调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!