Допустим, у нас есть простой шаблон функции D, который возвращает длину массива:
size_t len(T)(T[] arr) {
return arr.length;
}
И у нас есть два массива:
int[] arr0 = [1, 1, 2, 3, 5, 8];
char[] arr1 = ['a', 'b', 'c', 'd', 'e'];
Теперь мне также нуженШаблон функции, который будет печатать ввод и результат вышеупомянутого len
шаблона функции.
void writeResult(T)(T[] param, T result) {
import std.stdio;
import std.format;
writeln(format("%s --> %s", param, result));
}
Теперь давайте проверим len
с нашими двумя массивами.
writeResult(arr0, len(arr0)); // [1, 1, 2, 3, 5, 8] --> 6
writeResult(arr1, len(arr1)); // writeResult cannot deduce function from argument types !()(char[], uint), candidates are:
test.d(4): writeResult(T)(T[] param, T result)
У нас есть возвращаемый тип size_t
для обоих случаев, но с массивом int[]
он работает, а с массивом char[]
- нет. В чем причина такого поведения?