【C++】Lambda链式调用
2018-03-04 22:07
561 查看
实现一个链式调用的lambda表达式
首先创建一个task对象,然后连续调用then的函数,只需要保证前一个函数的输出为后一个的输入即可。最后在需要的时候调用计算结果。代码如下:(参考-深入应用C++代码优化与工程级应用3.3.4节)
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; auto func = std::move(m_fn); return Task<return_type(Args...)>([func, &f](Args&&...args) { return f(func(std::forward<Args>(args)...)); }); } private: std::function<R(Args...)> m_fn; }; void tesk() { Task<int(int)> task([](int i) {return i; }); auto f = task .then([](int i) {return i + 1; }) .then([](int i) {return i + 2; }) .then([](int i) {return i + 3; }); auto result = f.run(0); cout << "run task result:" << result << endl; }
运行得出结果如下:
“run task result:6”
相关文章推荐
- lambda的链式调用 c++11实现
- C++ for_each构造函数和析构函数的调用,仿函数,lambda
- C++ for_each构造函数和析构函数的调用,仿函数,lambda
- C++通过bind,lambda表达式等实现简单的异步函数调用模型
- 第24课 可变参数模板(5)_DllHelper和lambda链式调用
- C++构造函数与析构函数的调用顺序
- Lua学习笔记(一) vs2013如何在C++中调用Lua(修正版)
- C++和C#编写的COM组件与DLL库相互调用
- [Effective C++]条款05 了解C++默默编写并调用哪些函数
- c++调用lua
- C++继承中构造函数调用顺序
- Effective C++ Item 5 了解 C++ 默默编写并调用哪些函数
- Android Studio中通过jni实现对C/C++代码的调用,HelloJni,Ubuntu
- [linux,c++]使用指针函数实现多个函数调用_Advanced
- C,C++代码中调用python脚本
- 在c/c++中调用Java方法
- C#调用C++字符集与类型对比
- Java Native Interface(Java 调用Delphi、C、C++编写的DLL)
- C++ 调用DLL 函数
- 在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?