无法推断出模板类型?

Meh*_*dad 3 d

所以我有以下代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

我称之为:

invert([[5, 6], [6, 7]]);
Run Code Online (Sandbox Code Playgroud)

我得到:

test.d(94):错误:模板test.invert(T)与任何函数模板声明都不匹配
test.d(94):错误:模板test.invert(T)无法从参数类型推导出模板函数!()(int[][])

在不丢失自动推理功能的情况下,最简单的解决方法是什么?

Jon*_*vis 5

问题是你不能有一个静态数组的文字.最终得到一个动态数组 - int[][]在这种情况下 - 而不是int[2][]你想要的.推理工作得很好.这是你给它的类型是错误的.您将不得不创建一个正确类型的变量.

  • 您无法将动态数组转换为静态数组.我认为编译器曾经对这些事情保持沉默,但它现在不允许这样做.这是一件好事,因为这两种类型是不同的(例如`by value`与`by reference`参数传递). (2认同)