第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++ 11中的遞歸lambda函數(shù)

C ++ 11中的遞歸lambda函數(shù)

C++
Qyouu 2019-08-26 15:13:22
C ++ 11中的遞歸lambda函數(shù)我是C ++ 11的新手。我正在編寫以下遞歸lambda函數(shù),但它不編譯。sum.cpp#include <iostream>#include <functional>auto term = [](int a)->int {   return a*a;};auto next = [](int a)->int {   return ++a;};auto sum = [term,next,&sum](int a, int b)mutable ->int {   if(a>b)     return 0;   else     return term(a) + sum(next(a),b);};int main(){   std::cout<<sum(1,10)<<std::endl;   return 0;}編譯錯誤:vimal @ linux-718q:?/ Study / 09C ++ / c ++ 0x / lambda> g ++ -std = c ++ 0x sum.cppsum.cpp:在lambda函數(shù)中:sum.cpp:18:36:錯誤:' ((<lambda(int, int)>*)this)-><lambda(int, int)>::sum'不能用作函數(shù)gcc版本gcc版本4.5.0 20091231(實驗性)(GCC)但如果我改變sum()下面的聲明,它的作用是:std::function<int(int,int)> sum = [term,next,&sum](int a, int b)->int {    if(a>b)      return 0;    else      return term(a) + sum(next(a),b);};有人可以點亮這個嗎?
查看完整描述

3 回答

?
慕尼黑8549860

TA貢獻1818條經(jīng)驗 獲得超11個贊

使用C ++ 14,現(xiàn)在很容易制作一個有效的遞歸lambda,而不必std::function在幾行代碼中產(chǎn)生額外的開銷(從原始代碼中進行少量編輯以防止用戶意外復制):

template <class F>struct y_combinator {
    F f; // the lambda will be stored here

    // a forwarding operator():
    template <class... Args>
    decltype(auto) operator()(Args&&... args) const {
        // we pass ourselves to f, then the arguments.
        // [edit: Barry] pass in std::ref(*this) instead of *this
        return f(std::ref(*this), std::forward<Args>(args)...);
    }};// helper function that deduces the type of the lambda:template <class F>y_combinator<std::decay_t<F>> make_y_combinator(F&& f) {
    return {std::forward<F>(f)};}

您的原始sum嘗試成為:

auto sum = make_y_combinator([term,next](auto sum, int a, int b) {
  if (a>b) {
    return 0;
  }
  else {
    return term(a) + sum(next(a),b);
  }});


查看完整回答
反對 回復 2019-08-26
  • 3 回答
  • 0 關注
  • 509 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號