d编译时扩展ctfe

原文
对:

//main.d
import std;

void main()
{
    enum x = iota(1, 5).reduce!"a * b";
    x.writeln();
}

通过类似:

dmd --expand-ctfe main.d -o expanded.d
cat expanded.d

得到:

//expanded.d
import std;

void main()
{
    24.writeln();
}

可试试-vcg-ast标志:

import object;
import std;
void main()
{
    enum int x = 24;
    writeln(24);
    return 0;
}

// 一堆模板实例

或者这样:

template printEnum(alias x, string file = __FILE__, size_t line = __LINE__)
{
   enum printEnum = x;
   pragma(msg, file, "(", int(line), "): ", printEnum);//打印.
}
enum x = printEnum!(iota(1, 5).reduce!"a * b");

可这样:

debug template printEnum(...) {
  ... // 上面内容仅用于调试时.
}//加上-debug标志.
else
enum printEnum(alias x) = x;

参考
大内存,用64位编译:

dmd -m64 -run test.d
posted @ 2022-07-21 09:48  zjh6  阅读(11)  评论(0)    收藏  举报  来源