递增交叉,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;//都是闭包.

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

posted @ 2019-09-18 15:10  zjh6  阅读(25)  评论(0)    收藏  举报  来源