作者:手机用户2602929101 | 来源:互联网 | 2023-09-17 11:34
只是想知道 – 我写了以下功能
template
T* asFlatArray (T arr[][N])
{
// some code
}
并称之为
asFlatArray(myArray); // where myArray is int myArray[some_size][sime_size];
编译运行没有错误.但如果我改变’arr’来引用像
template
T* asFlatArray (T (&arr)[][N])
{
// some code
}
我会有错误:
parameter ‘arr’ includes reference to array of unknown bound ‘T [][N]’
我知道如何解决它
template
T* asFlatArray (T (&arr)[Rows][Columns])
但我不明白为什么会这样?
解决方法:
根本问题是第一个功能模板相当于
template
T* asFlatArray (T (*arr)[N]) {}
所以没有要计算的维度.它将匹配指向数组的指针,或任何可以衰减到指向数组的指针.因此也可以匹配2D阵列.
对于第二个例子,类型为T [] [N]的引用或指针不能是函数参数,这会导致编译器错误.当然,您可以为缺少的维度添加额外的模板参数:
template
T* asFlatArray(T (&arr)[N][M]) {}