12

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

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

我确定我缺少一些基本的东西!备用锤子!

4

2 回答 2

14

您不能按值传递数组。在一个函数中的参数T array[length]完全一样T* array。没有可用于推断的长度信息。

如果要按值获取数组,则需要类似std::array. 否则,您可以参考它,它不会丢失尺寸信息:

template<typename T, int length>
void ProcessArray(T (&array)[length]) { ... }
于 2012-06-24T17:11:04.860 回答
6

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

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

double foo[12];
process_array(foo); // fine
于 2012-06-24T17:12:10.240 回答