函数模板中的数组类型推导

Array type deduction in a function template

本文关键字:类型 数组 函数模板      更新时间:2023-10-16

我有一个模板方法如下:-

template<typename T, int length>
void ProcessArray(T array[length]) { ... }

然后我有使用上述方法的代码:-

int numbers[10] = { ... };
ProcessArray<int, 10>(numbers);

我的问题是为什么我必须显式指定模板参数。不能自动推断,以便我可以按如下方式使用:-

ProcessArray(numbers); // without all the explicit type specification ceremony

确定我错过了一些基本的东西!饶了一把锤子!

不能按值传递数组。在函数参数中T array[length]T* array完全相同。没有长度信息可供推断。

如果你想按值获取数组,你需要类似 std::array .否则,您可以通过引用来获取它,这不会丢失大小信息:

template<typename T, int length>
void ProcessArray(T (&array)[length]) { ... }

您缺少正确的参数类型: 数组只能通过引用传递:

template <typename T, unsigned int N>
void process_array(T (&arr)[N])
{
    // arr[1] = 9;
}
double foo[12];
process_array(foo); // fine