代码之家  ›  专栏  ›  技术社区  ›  porton

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

  •  0
  • porton  · 技术社区  · 6 年前

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

    如果我这样做呢 想要在编译时计算一个纯函数,但要在运行时计算它,怎么做?

    例子:

    static int result = f();
    

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Infiltrator    6 年前

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

    尝试对任何函数进行编译时函数求值,但仅当必须进行时。这是由上下文决定的-答案必须在编译时存在吗?以下情况也是如此:

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

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

    static int result = f();
    

    上面是一个静态初始值设定项,因此是CTFE。


    static int result;
    result = f();
    

    if 使用一个特殊值检查它,这意味着它还没有运行,或者使用一个单独的bool标志。

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

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