加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C++11 lambda链式调用

发布时间:2020-12-15 04:48:40 所属栏目:百科 来源:网络整理
导读:#include "pch.h" #include #include #include using namespace std; template class Task; template class Task { public: Task(function f):m_fn(move(f)) {} Task(function f):m_fn(f) {} R Run(Args...args) { return m_fn(forward(args)...); //完美转

#include "pch.h"

#include

#include

#include

using namespace std;

template

class Task;

template

class Task

{

public:

Task(function&&f):m_fn(move(f)) {}

Task(function&f):m_fn(f) {}

R Run(Args&&...args)

{

return m_fn(forward(args)...); //完美转发

}

// 连续调用新的函数,将函数不断地串联起来

template

auto Then(F&& f)->Task::type(Args...)>

{

// result_of 获取F的返回类型

using return_type = typename result_of::type;

auto func = move(m_fn);

return Task([func,&f](Args&&... args) {

//将前一个函数的输出作为后一个函数的输入

return f(func(forward(args)...));

});

}

private:

functionm_fn;

};

int main()

{

Task task([](int i) {return i; });

auto result = task.Then([](int i) {return i + 1; }).Then([](int i) {return i + 2; }).Then([](int i) {return i + 3; }).Run(1);

cout << result << endl;

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读