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

D语言编译时版本比较

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

    我想要 编译时间 (因为用于 static if )D中版本字符串的比较。

    例如 1.2.12 大于 1.2.2 . 我想在编译时进行这种比较。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Lupus Ossorum    6 年前

    编写在运行时工作的函数。然后叫它。类似:

    bool less(string a, string b)
    {
      auto ap = a.splitter(".").map!(x => to!int(x));
      auto bp = b.splitter(".").map!(x => to!int(x));
      while (!ap.empty && !bp.empty)
      {
        if (ap.front < bp.front) return true;
        ap.popFront; bp.popFront;
      }
      return ap.empty;
    }
    static if (less("1.2.12", "1.2.2"))
      pragma(msg, "it's less");
    else
      pragma(msg, "it's not less");
    

    您可以在编译时调用普通函数。这就是我们在D中所称的CTFE(编译时函数评估)。

    引用沃尔特·布赖特(在我的记忆中)“D有在编译时运行D代码的独特能力”。