【问题标题】:Pure D function to be calculated at run time (not compile time)纯 D 函数在运行时计算(不是编译时)
【发布时间】:2019-01-20 13:11:09
【问题描述】:

我很好奇:如果有纯D函数,可以在编译时计算出来。

如果我想要一个纯函数在编译时计算,但要在运行时计算,怎么办?

例子:

static int result = f();

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

【问题讨论】:

    标签: compilation runtime d pure-function


    【解决方案1】:

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

    尝试对任何函数进行编译时函数评估,但仅在必须这样做时。这是由上下文决定的——编译时必​​须有答案吗?这适用于:

    • 枚举值
    • 静态初始化器
    • 静态条件
    • 静态 foreach 参数
    • 模板参数

    如果您因此在运行时需要它,只需在这些上下文之一之外调用它。

    static int result = f();
    

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


    static int result;
    result = f();
    

    这不再是静态初始化器,因此不再是 CTFE。为了防止它被调用两次,你可以用一个特殊的值对它进行常规的if 检查,这意味着它还没有运行,或者使用一个单独的 bool 标志。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2011-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多