0
点赞
收藏
分享

微信扫一扫

d编译时扩展ctfe

49路末班车 2022-09-11 阅读 180


原文 对:

//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


举报

相关推荐

0 条评论