【发布时间】:2019-10-22 21:36:42
【问题描述】:
假设我们有一个简单的 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[] 数组它不能。这种行为的原因是什么?
【问题讨论】:
标签: d