在运行时(而非编译时)计算纯D函数

时间:2019-01-20 13:11:09

标签: compilation runtime d pure-function

我很好奇:如果有一个纯D函数,可以在编译时进行计算。

如果我不希望在编译时计算纯函数,但要在运行时计算纯函数怎么办?

示例:

static int result = f();

f是一个纯函数,我希望它在运行时进行计算。

1 个答案:

答案 0 :(得分:2)

仅供参考,并非所有纯函数都可以在编译时计算,并且纯函数不需要在编译时运行。他们实际上彼此之间几乎没有关系。

尝试对ANY函数进行编译时函数评估,但仅在必须进行评估时才进行。这是由上下文决定的-答案在编译时是否必须存在?这适用于:

  • 枚举值
  • 静态初始值设定项
  • 如果条件稳定
  • 静态foreach参数
  • 模板参数

如果您希望在运行时使用它,只需在这些上下文之一之外调用它即可。

static int result = f();

上面是静态初始化器,因此是CTFE。


static int result;
result = f();

这不再是静态初始化程序,因此也不再是CTFE。为了防止它被调用两次,您可以对它进行常规的if检查,并带有一个特殊值,表示它尚未运行或带有单独的bool标志。

如果这是在模块范围内,请使用构造函数:

static int result;
static this() { result = f(); }