递增交叉,d和c++,谁更牛逼?

import std.stdio;
import std.range;

auto interspersed(R, D)(R r, D delim) {
  struct MyRoundRobin {
    bool doDelim = false;

    auto empty() {
      return r.empty;
    }

    auto front() {
      return (doDelim ? delim : r.front);
    }

    auto popFront() {
      if (!doDelim) {
        r.popFront();
      }
      doDelim = !doDelim;
    }
  }

  return MyRoundRobin();
}

void main(){
  auto r = 10.iota.interspersed(42);
  writefln("%(%s %)", r);
}

这是d,我看不懂,为什么要这样写.
下面这是c++.我写的.

构 递增交叉{//有向量,所以就放在构里面了
    向量<>;
    空 交叉(整 增,整 j){//从0到增加,中间混有j.
        清理();(整 i=0;i<;i++)竖压(,i,j);.出后();
    }
};

感觉我的,比他的简单多了.又清楚又明白.
闭包,可以指向类/构.方法().
函数指针转换为委托,调用std.functional.toDelegate
使用闭包,可以访问域内变量.

    auto fn_1 =(int x){return x + y;};
    auto fn_2 =(int x)=> x + y;//都是闭包.

闭包更灵活,强大.但有个上下文指针.
闭包作用:当函数不是对象方法时(因此不会出现在类定义中),需要保留函数中变量域,这样垃圾收集器不会丢了他们

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值