欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++實現(xiàn)的一個可以寫遞歸lambda的Y函數(shù)

 更新時間:2014年07月22日 09:24:44   投稿:junjie  
這篇文章主要介紹了C++實現(xiàn)的一個可以寫遞歸lambda的Y函數(shù),在Y函數(shù)的幫助,這個lambda表達是可以成功看到自己,然后遞歸調用的,需要的朋友可以參考下

最近學習C++11的variadic template argument,終于可以擺脫用fpmacro模板來復制一大堆代碼的做法了,好開心。這個例子的main函數(shù)用lambda寫了一個斐波那契數(shù)列的遞歸計算函數(shù)。跟以往不同的是,在Y函數(shù)的幫助下,這個lambda表達是可以成功看到自己,然后遞歸調用。當然這仍然需要用普通的C++遞歸來實現(xiàn),并不是λ-calculus那個高大上的Y Combinator。

#include <functional>
#include <memory>
#include <iostream>
#include <string>

using namespace std;

template<typename TResult, typename ...TArgs>
class YBuilder
{

private:

  function<TResult(function<TResult(TArgs...)>, TArgs...)> partialLambda;

public:

  YBuilder(function<TResult(function<TResult(TArgs...)>, TArgs...)> _partialLambda)

    :partialLambda(_partialLambda)

  {

  }

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

  {

    return partialLambda(

      [this](TArgs ...args)

      {

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

      }, args...);

  }

};

template<typename TMethod>

struct PartialLambdaTypeRetriver

{

  typedef void FunctionType;

  typedef void LambdaType;

  typedef void YBuilderType;

};

template<typename TClass, typename TResult, typename ...TArgs>

struct PartialLambdaTypeRetriver<TResult(__thiscall TClass::*)(function<TResult(TArgs...)>, TArgs...)>
{

  typedef TResult FunctionType(TArgs...);

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

  typedef YBuilder<TResult, TArgs...> YBuilderType;

};


template<typename TClass, typename TResult, typename ...TArgs>

struct PartialLambdaTypeRetriver<TResult(__thiscall TClass::*)(function<TResult(TArgs...)>, TArgs...)const>

{

  typedef TResult FunctionType(TArgs...);

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

  typedef YBuilder<TResult, TArgs...> YBuilderType;

};

 

template<typename TLambda>

function<typename PartialLambdaTypeRetriver<decltype(&TLambda::operator())>::FunctionType> Y(TLambda partialLambda)

{

  return typename PartialLambdaTypeRetriver<decltype(&TLambda::operator())>::YBuilderType(partialLambda);

}

 

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

{

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

  {

    return index<2

      ?1

      :self(index-1)+self(index-2);

  });

 

  for (int i = 0; i < 10; i++)
  {

    cout << fib(i) << " ";

  }

  cout << endl;

}

相關文章

  • C語言計算大數(shù)階乘的方法

    C語言計算大數(shù)階乘的方法

    這篇文章主要為大家詳細介紹了C語言計算大數(shù)階乘的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • C++使用BitBlt進行窗口抓圖的方法

    C++使用BitBlt進行窗口抓圖的方法

    這篇文章主要介紹了C++使用BitBlt進行窗口抓圖的方法,幫助大家更好的理解和使用c++,感興趣的朋友可以了解下
    2021-01-01
  • C++虛函數(shù)表深入研究

    C++虛函數(shù)表深入研究

    這篇文章主要介紹了C++的虛函數(shù)表,內容非常詳細,思路清晰,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • C++實現(xiàn)分水嶺算法(Watershed Algorithm)

    C++實現(xiàn)分水嶺算法(Watershed Algorithm)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)分水嶺算法Watershed Algorithm,具有一定的參考價值,感興趣的小伙伴們可以參考一 下
    2018-01-01
  • C++11、C++14、C++17、C++20常用新特性

    C++11、C++14、C++17、C++20常用新特性

    本文主要介紹了C++11、C++14、C++17、C++20常用新特性,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • C語言復雜鏈表的復制實例詳解

    C語言復雜鏈表的復制實例詳解

    這篇文章主要為大家詳細介紹了C語言復雜鏈表的復制,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++實現(xiàn)數(shù)字轉換為十六進制字符串的方法

    C++實現(xiàn)數(shù)字轉換為十六進制字符串的方法

    這篇文章主要介紹了C++實現(xiàn)數(shù)字轉換為十六進制字符串的方法,涉及C++操作數(shù)字與字符串轉換的相關技巧,需要的朋友可以參考下
    2015-06-06
  • C語言實現(xiàn)推箱子游戲

    C語言實現(xiàn)推箱子游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)推箱子游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • 解析c語言switch中break語句的具體作用

    解析c語言switch中break語句的具體作用

    以下是對c語言switch中break語句的作用進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-07-07
  • C++ 中構造函數(shù)的實例詳解

    C++ 中構造函數(shù)的實例詳解

    這篇文章主要介紹了C++ 中構造函數(shù)的實例詳解的相關資料,希望通過本文能幫助到大家,讓大家理解掌握這部分內容,需要的朋友可以參考下
    2017-10-10

最新評論