当前位置:  编程技术>c/c++/嵌入式

C++实现的一个可以写递归lambda的Y函数

    来源: 互联网  发布时间:2014-10-26

    本文导语:  最近学习C++11的variadic template argument,终于可以摆脱用fpmacro模板来复制一大堆代码的做法了,好开心。这个例子的main函数用lambda写了一个斐波那契数列的递归计算函数。跟以往不同的是,在Y函数的帮助下,这个lambda表达是可以...

最近学习C++11的variadic template argument,终于可以摆脱用fpmacro模板来复制一大堆代码的做法了,好开心。这个例子的main函数用lambda写了一个斐波那契数列的递归计算函数。跟以往不同的是,在Y函数的帮助下,这个lambda表达是可以成功看到自己,然后递归调用。当然这仍然需要用普通的C++递归来实现,并不是λ-calculus那个高大上的Y Combinator。

#include 
#include 
#include 
#include 

using namespace std;

template
class YBuilder
{

private:

  function partialLambda;

public:

  YBuilder(function _partialLambda)

    :partialLambda(_partialLambda)

  {

  }

  TResult operator()(TArgs ...args)const

  {

    return partialLambda(

      [this](TArgs ...args)

      {

        return this->operator()(args...);

      }, args...);

  }

};

template

struct PartialLambdaTypeRetriver

{

  typedef void FunctionType;

  typedef void LambdaType;

  typedef void YBuilderType;

};

template

struct PartialLambdaTypeRetriver
{

  typedef TResult FunctionType(TArgs...);

  typedef TResult LambdaType(function, TArgs...);

  typedef YBuilder YBuilderType;

};


template

struct PartialLambdaTypeRetriver

{

  typedef TResult FunctionType(TArgs...);

  typedef TResult LambdaType(function, TArgs...);

  typedef YBuilder YBuilderType;

};

 

template

function Y(TLambda partialLambda)

{

  return typename PartialLambdaTypeRetriver::YBuilderType(partialLambda);

}

 

int _tmain(int argc, _TCHAR* argv[])

{

  auto fib = Y([](function self, int index)

  {

    return index

    
 
 

您可能感兴趣的文章:

  • 先序遍历二叉树的递归实现与非递归实现深入解析
  • C# 实现阶乘 (递归,非递归) 实现代码
  • 使用C语言递归与非递归实现字符串反转函数char *reverse(char *str)的方法
  • 归并排序的递归实现与非递归实现代码
  • php+mysql不用递归实现的无限级分类实例(非递归)
  • 如何实现递归
  • 使用python实现递归版汉诺塔示例(汉诺塔递归算法)
  • C#采用递归实现阶乘的方法
  • C 二分查找 递归与非递归的实现代码
  • 使用递归实现数组求和示例分享
  • 什么是递归算法,它又如何实现?(有例子最好!)
  • find命令怎么用能够实现不递归查找子目录?
  • sql函数实现递归查询示例
  • C# 递归查找树状目录实现方法
  • DevExpress实现TreeList向上递归获取符合条件的父节点
  • python 实现文件的递归拷贝实现代码
  • [求助]solaris下grep如何实现递归地查找某目录下的文件。
  • php递归实现无限分类生成下拉列表函数代码
  • php递归方法实现无限分类示例
  • sql递归查询(with cte实现)
  • Base64编码原理详解及c++编码解码实现
  • 我实现了个J2EE技术的服务器,支持TCP、UDP和数据库,由于性能的原因,需要改为C或C++实现,我是C、C++新手,我该如何入手呢?看什么样的
  • c++实现MD5算法代码示例
  • java 与 C++ 实现后绑定的方法
  • c++通用模板类(template class)定义实现详细介绍
  • Qt实现的C++框架 qtioccontainer
  • 用C或C++实现主存的分配与回收
  • 在linux系统上,如何用C++实现获取和设置系统时间?
  • 文本压缩算法C++实现 Golden Huffman
  • C++标准库实现 libc++
  • C++的XMLRPC实现 XMLRPC++
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 谁帮我看一下下面几个实现函数需要实现要用到什么函数?在线等待,必给分!
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • 标准C下没有字符处理函数,怎样写一个实现下面功能的函数?
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • EJB QL都支持什么函数啊?能不能支持trim函数呢?如果不能,应该怎么实现这样的功能呢?
  • php通过pack和unpack函数实现对二进制数据封装及解析
  • sendfile()函数为什么效率高? 它的实现难道没有涉及普通I/O函数么
  • Linux有定时器函数吗?是不是要自己实现?如果有的话是什么函数呢?谢谢
  • 自己实现strcpy函数的实现方法
  • C语言应用程序使用的函数来源于libc库, Libc库中的函数是在哪里实现的??
  • 高手帮帮忙!vi中如何实现跳转到任意结构体或函数的声明处,包括系统库中声明的函数和数据结构?
  • 如何实现Java下的回调函数!
  • 怎样从Linux源文件中找到函数实现方式?
  • 关于内核里实现的函数
  • 可不可以在程序中直接使用ftp客户端的函数实现文件传输?
  • 整型数据做函数的参数,怎样实现传地址,和调用程序共用一个地址?
  • 请问如何查看libX11.so中的函数实现
  • 菜鸟问题:linux各个函数的实现源代码在哪?
  • 请问,pipe()这个管道建立函数在哪里实现的?
  • 有没有函数实现压缩算法?
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • 通过javascript库JQuery实现页面跳转功能代码
  • 怎么用Jsp实现在页面实现树型结构?
  • php实现socket实现客户端和服务端数据通信源代码
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • flash AS3反射实现(describeType和getDefinitionByName) iis7站长之家
  • 网站重定向用C语言实现iptables,ACL实现




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3