考虑以下代码,打印出最多20个偶数:
import std.stdio;
class count_to_ten{
static int opApply()(int delegate(ref int) dg) {
int i = 1;
int ret;
while(i <= 10){
ret = dg(i);
if(ret != 0) {
break;
}
i++;
}
return ret;
}
}
void main() {
int y = 2;
foreach(int x; count_to_ten) {
writeln(x * y);
}
}
opApply的语法要求它将委托或函数作为普通参数。但是,即使我们放宽了这一点并允许opApply将函数作为模板参数,我们仍然无法使用代理,因为D没有提供任何方法将堆栈帧指针与函数指针分开。但是,这似乎应该是可能的,因为委托的函数指针部分通常是编译时常量。如果我们能够做到并且循环体很短,那么它实际上可以内联,这可能会加快这段代码的速度。
有没有办法做到这一点? D编译器是否有一些自动发生的技巧?