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

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

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

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

}

相關(guān)文章

  • C語言如何實現(xiàn)可變參數(shù)詳解

    C語言如何實現(xiàn)可變參數(shù)詳解

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

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

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

    C++ Cartographer源碼中關(guān)于Sensor的數(shù)據(jù)走向深扒

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

    深入聊聊C語言中的Const關(guān)鍵字

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

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

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

    C語言數(shù)據(jù)結(jié)構(gòu)之單向鏈表詳解分析

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

    簡單聊聊C++中線程的原理與實現(xiàn)

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

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

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

    詳解C語言常用的一些轉(zhuǎn)換工具函數(shù)

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

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

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

最新評論

舞阳县| 丰镇市| 大庆市| 九龙坡区| 珲春市| 囊谦县| 上栗县| 清远市| 贡山| 固原市| 叶城县| 尼玛县| 乐亭县| 西乌珠穆沁旗| 烟台市| 方城县| 义乌市| 乌海市| 宁安市| 黎城县| 扎兰屯市| 延边| 伊吾县| 长沙县| 西丰县| 平罗县| 阳新县| 滦平县| 普宁市| 萝北县| 察隅县| 甘德县| 双柏县| 铜山县| 盐源县| 奉化市| 合江县| 玉山县| 仁布县| 阳谷县| 贵南县|