D

时间:2019-01-20 00:41:36

标签: version d compile-time

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

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

1 个答案:

答案 0 :(得分:3)

编写一个在运行时有效的函数。然后调用它。像这样:

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(编译时间函数评估)。

引用Walter Bright(从我的记忆中得出):“ D具有在编译时运行D代码的独特能力”。