Не можете определить типы шаблонов? - PullRequest
3 голосов
/ 30 октября 2011

Итак, у меня есть следующий код:

void invert(T)(T[2][] arr)
{
    auto result = new T[2][arr.length];
    foreach (i, v; arr)
        result[i] = [-v[0], -v[1]];
    return result;
}

, и я называю его:

invert([[5, 6], [6, 7]]);

и получаю:

test.d(94): Ошибка: template test.invert(T) не соответствует ни одному объявлению шаблона функции
test.d(94): Ошибка: template test.invert(T) не может определить функцию шаблона из типов аргументов !()(int[][])

Какой самый простой способ исправить этобез потери функции автоматического вывода?

1 Ответ

5 голосов
/ 30 октября 2011

Проблема в том, что вы не можете иметь литерал, который является статическим массивом. Вы получите динамический массив - int[][] в этом случае - вместо int[2][], который вы хотите. Логический вывод работает просто отлично. Это тип, который вы даете, это неправильно. Вам нужно будет создать переменную правильного типа.

...