D编译器可以内联常量函数指针

时间:2014-03-12 06:13:33

标签: foreach delegates inline d

考虑以下代码,打印出最多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编译器是否有一些自动发生的技巧?

0 个答案:

没有答案