D переменная времени компиляции однородных массивов - PullRequest
2 голосов
/ 18 ноября 2011

D2.056

void f(string[] names...)
{
    foreach (name; names)
    {
        mixin("string " ~ name ~ " = name;");
    }
}

int main()
{
    f("a", "b");
    return 0;
}

Почему это не работает? Он жалуется на то, что имя не читается во время компиляции, но это ложное утверждение. Содержимое 'names' известно во время компиляции, так как это {"a", "b"};

Я пытаюсь связать библиотеку, и переданные имена функций должны быть определены и указаны в библиотеке.

1 Ответ

1 голос
/ 18 ноября 2011

Функции должны быть действительны как для компиляции, так и для выполнения во время компиляции. Очевидно, f не компилируется.

В зависимости от того, чего вы пытаетесь достичь, вы можете либо сделать names аргументом шаблона (что сделает foreach статическим), либо заставить f построить строку и смешать результат в f Звонок на сайт.

...