`
febird
  • 浏览: 260695 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Recursive Lambda in C++

 
阅读更多

C++ 标准委员会真是太死板了,既然给 C++ 增加了 lambda,就真的按部就班地套用 lambda 的标准定义,也不加个 lambda的自引用机制。找了半天,除了那些学院派的足以把99%的人搞晕的 Fix Point + Y combinator,一个最实用的解决方案就是把 lambda bind 到 std::function<...>.

我那段需要 recursive lambda 的代码:


这是以 DFS 顺序打印 Tree Shape Automata 的代码,为了各种原因(内存,速度,简洁),设计了一个通用的 for_each_move 来遍历指定 state 的每个直接 target。

如果有 recursive lambda,这代码要更简洁高效一点(假定 [[]] 是引用lambda 自身的那个符号):

这是 C++ Committee 故意的!它就是要让大家难受,以昭显他们的 Pure Academic,他们的 Pure Mathematic!
加一个自引用的符号多容易呀!
分享到:
评论
1 楼 satan_1st 2013-07-24  
据说可以用(*this)取得当前的lambda。

相关推荐

    C++函数详解

    同时,C++11引入了lambda表达式,这使得编写匿名函数更加方便,极大地增强了C++的表达能力。 在实际编程中,正确地使用和设计函数能够提高代码的效率和可维护性。例如,通过合理划分函数的职责,遵循单一职责原则,...

    C++ parsing DSL.zip

    C++11及更高版本引入了lambda表达式和模板元编程等特性,使得在C++中构建DSL变得更加方便。例如,可以利用模板元编程创建一种声明式语法,使得DSL代码更接近自然语言。 为了使DSL易于使用,还需要提供一些便利的API...

    Functional Programming with C++.pdf

    Lambda表达式(Lambdas)是C++11中引入的一个特性,它允许开发者定义匿名函数对象。在函数式编程中,Lambda表达式非常有用,因为它们可以灵活地作为高阶函数的参数。 memoization是一种优化技术,用于缓存函数调用...

    C++11 14 17 20 多线程从原理到线程池实战视频.zip

    1-7 lambda临时函数作为线程入口 2-1 多线程的状态及其切换流程分析 2-2 竞争状态和临界区介绍_互斥锁mutex代码演示 2-3 互斥锁的坑_线程抢占不到资源原因和解决方法 2-4 超时锁timed_mutex和可重入锁recursive 2-5 ...

    遍历_C++_

    7. **递归遍历(Recursive Traversal)**: 对于树形结构或自定义数据结构,递归遍历是一种常见方法。每个节点都会调用自身来遍历其子节点。 8. **并行遍历(Parallel Traversal)**: 在多核处理器系统中,可以...

    c++函数查询

    自C++11起,引入了lambda表达式,这是一种创建匿名函数的方式。它们常用于函数对象和回调函数: ```cpp auto square = [](int x) { return x * x; }; ``` 8. **函数指针(Function Pointers)** 函数指针可以...

    RLSFilter:递归最小二乘(RLS)过滤器的C ++实现

    递归最小二乘(Recursive Least Squares, RLS)滤波器是一种在线参数估计方法,广泛应用于信号处理和控制系统的领域。它是最小二乘算法的一种变体,通过逐次更新参数来实时跟踪系统或信号的变化。在C++中实现RLS...

    Loving Lisp

    - **Recursion**: Writing recursive functions for iterative tasks. - **Closures**: Creating closures to encapsulate state. #### Defining Common Lisp Macros Macros are a powerful feature of Lisp, ...

    scelta :(实验性)用于变体和可选类型的语法糖

    塞尔塔 variant和optional C ++ 17零开销语法糖。 目录 总览 std::variant和std::optional被引入C ++ 17的标准库。 它们是求和类型,可以大大提高类型的安全性和性能。 但是,它们存在一些问题: ...

Global site tag (gtag.js) - Google Analytics