4
我正在处理一些嵌入式代码,我无法使用STL容器。我有几个二维数组,其大小在编译时已知,并且希望编写一个模板函数来清除它们。但是,我无法让它工作。下面是我的尝试:清除任意的二维数组
template <std::size_t sizeA, std::size_t sizeB>
void clearArray(float a[sizeA][sizeB])
{
float* begin = &a[0][0];
std::fill_n(begin, sizeA * sizeB, 0.0);
}
int main()
{
float f[5][6];
clearArray(f);
for (int i = 0; i < 5; ++i)
for (int j = 0; j < 6; ++j)
cout << f[i][j] << " ";
}
然而,编译器不能成功地执行参数查询:
TEST.CPP(22):错误C2784:“无效clearArray(浮动[SIZEA] [sizeB ])”:无法推断出模板参数为 '' 从 '浮起[5] [6]浮动[SIZEA] [sizeB]' 1> TEST.CPP(13):看到的声明 'clearArray'
有没有办法做到这一点?我知道我可以使用sizeof(f)/sizeof(float)
来获取元素的数量,或者我可以手动指定尺寸,但是我希望尽可能简单。
另外,我在VS2012中测试了这个,但是这个嵌入式系统的编译器不支持C++ 11。
真奇怪我的印象是,它不会腐烂的指针,如果你明确指定尺寸此。伟大的作品 – rlbond
@rlbond不,即使你指定了deme也会衰败nsions。对于一维数组,二维数组等是如此。 – songyuanyao