Сравнение версий во время компиляции в D - PullRequest
0 голосов
/ 20 января 2019

Я хочу время компиляции (потому что будет использоваться в static if) сравнение строк версии в D.

Например, 1.2.12 больше 1.2.2.Я хочу сделать такие сравнения во время компиляции.

1 Ответ

0 голосов
/ 20 января 2019

Напишите функцию, которая работает во время выполнения.Тогда позвони.Что-то вроде:

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 во время компиляции».

...