创建一个新的输入范围类型
InputRange
概念有三个功能,例如:
struct InputRange(T) {
@property bool empty();
@property T front();
void popFront();
}
总之,一种方式
- 检查范围是否为空
- 获取当前元素
- 转到下一个元素
要使我们自己的类型成为 InputRange
,我们必须实现这三个功能。让我们来看看无限的正方形序列。
struct SquaresRange {
int cur = 1;
@property bool empty() {
return false;
}
@property int front() {
return cur^^2;
}
void popFront() {
cur++;
}
}
有关斐波那契的例子,请参阅 D 之旅 。