在下面的C ++代码中,模板化的Check函数提供的输出不是我想要的:它是1而不是3.我怀疑K映射到int*
,而不是int[3]
(是一种类型?)。我希望它给出与第二个(非模板化)函数相同的输出,我明确给出了数组的大小......
没有使用宏,有没有办法编写一个接受单个参数但仍然知道数组大小的Check函数?
#include <iostream>
using namespace std;
int data[] = {1,2,3};
template <class K>
void Check(K data) {
cout << "Deduced size: " << sizeof(data)/sizeof(int) << endl;
}
void Check(int*, int sizeofData) {
cout << "Correct size: " << sizeofData/sizeof(int) << endl;
}
int main() {
Check(data);
Check(data, sizeof(data));
}
感谢。
PS:在实际代码中,数组是一个结构数组,必须迭代才能进行单元测试。
答案 0 :(得分:10)
template<class T, size_t S>
void Check(T (&)[S]) {
cout << "Deduced size: " << S << endl;
}