最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現的一個可以寫遞歸lambda的Y函數

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

最近學習C++11的variadic template argument,終于可以擺脫用fpmacro模板來復制一大堆代碼的做法了,好開心。這個例子的main函數用lambda寫了一個斐波那契數列的遞歸計算函數。跟以往不同的是,在Y函數的幫助下,這個lambda表達是可以成功看到自己,然后遞歸調用。當然這仍然需要用普通的C++遞歸來實現,并不是λ-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語言如何實現可變參數詳解

    C語言如何實現可變參數詳解

    這種可變參數可以說是C語言一個比較難理解的部分,下面這篇文章主要給大家介紹了關于C語言如何實現可變參數的相關資料,需要的朋友可以參考下
    2021-07-07
  • C++深入刨析類與對象的使用

    C++深入刨析類與對象的使用

    類和對象是兩種以計算機為載體的計算機語言的合稱。對象是對客觀事物的抽象,類是對對象的抽象。類是一種抽象的數據類型;變量就是可以變化的量,存儲在內存中—個可以擁有在某個范圍內的可變存儲區(qū)域
    2022-05-05
  • C++ Cartographer源碼中關于Sensor的數據走向深扒

    C++ Cartographer源碼中關于Sensor的數據走向深扒

    這篇文章主要介紹了C++ Cartographer源碼中關于Sensor的數據走向,整個Cartographer源碼閱讀是很枯燥的, 但絕對是可以學到東西的,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-03-03
  • 深入聊聊C語言中的Const關鍵字

    深入聊聊C語言中的Const關鍵字

    關鍵字const用來定義只讀變量,被const定義的變量它的值是不允許改變的,即不允許給它重新賦值,即使是賦相同的值也不可以,下面這篇文章主要給大家介紹了關于C語言中Const關鍵字的相關資料,需要的朋友可以參考下
    2022-02-02
  • 一起來學習C++的動態(tài)內存管理

    一起來學習C++的動態(tài)內存管理

    這篇文章主要為大家詳細介紹了C++的動態(tài)內存管理,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言數據結構之單向鏈表詳解分析

    C語言數據結構之單向鏈表詳解分析

    鏈表可以說是一種最為基礎的數據結構了,而單向鏈表更是基礎中的基礎。鏈表是由一組元素以特定的順序組合或鏈接在一起的,不同元素之間在邏輯上相鄰,但是在物理上并不一定相鄰。在維護一組數據集合時,就可以使用鏈表,這一點和數組很相似
    2021-11-11
  • 簡單聊聊C++中線程的原理與實現

    簡單聊聊C++中線程的原理與實現

    C++11?引入了多線程支持,提供了一套基本的線程庫,包括線程、互斥量(mutex)、條件變量(condition_variable)等。這些組件可以幫助你在?C++?程序中實現并發(fā)和多線程編程,本文就來和大家簡單聊聊吧
    2023-03-03
  • C++如何獲取本機的IP地址

    C++如何獲取本機的IP地址

    這篇文章主要為大家詳細介紹了C++如何獲取本機IP地址小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • 詳解C語言常用的一些轉換工具函數

    詳解C語言常用的一些轉換工具函數

    這篇文章主要介紹了C語言常用的一些轉換工具函數,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-11-11
  • C語言實現井字棋游戲(人機對弈)

    C語言實現井字棋游戲(人機對弈)

    這篇文章主要為大家詳細介紹了C語言實現井字棋人機對弈游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01

最新評論

颍上县| 闸北区| 洪泽县| 屏东县| 常州市| 乐昌市| 甘孜| 白沙| 樟树市| 怀柔区| 株洲市| 鄂尔多斯市| 城固县| 天门市| 济阳县| 新巴尔虎左旗| 常熟市| 布拖县| 浏阳市| 衡山县| 松潘县| 斗六市| 工布江达县| 宁远县| 南川市| 汽车| 上虞市| 丹寨县| 改则县| 阳曲县| 开原市| 宜兴市| 同心县| 来安县| 金山区| 靖边县| 边坝县| 鄯善县| 安达市| 江北区| 锦州市|