如何在D中的基元类型上添加"opApply"?

Jer*_*oen 1 foreach d operator-overloading

我一直试图通过D中的字符数组来预知,但我无法弄清楚如何让它工作.

public MyClass opApply(MyClass delegate(int[]) dg) {
    // ...
    return myClass;
}

foreach(MyClass a; [5,6,9,2]) {}
Run Code Online (Sandbox Code Playgroud)

Ada*_*ppe 6

您无法在示例中精确地执行您想要的操作,但您可以创建一个辅助方法/包装器对象来执行几乎相同的操作.

结果将是:

foreach(MyClass a; [5,6,9,2].byMyClass) {}
Run Code Online (Sandbox Code Playgroud)

byMyClass函数看起来像这样:

MyClassRange byMyClass(int[] array) {
      return MyClassRange(array);
}
Run Code Online (Sandbox Code Playgroud)

MyClassRange 是一个提供迭代的辅助对象:

struct MyClassRange {
      int[] array;
      this(int[] a) { array = a; }

      import std.array;

      bool empty() { return array.empty; }
      void popFront() { array.popFront; }
      MyClass front() { return new MyClass(array.front); }
}
Run Code Online (Sandbox Code Playgroud)

然后,那个东西可以用foreach.对于这个确切的例子顺便说一下你也可以使用foreach(MyClass c; [1,2,3].map!(a => new MyClass(a))).该map功能在std.algorithm.