模板函数如何“知道”作为模板参数给出的数组的大小?

时间:2009-12-09 13:10:45

标签: c++ templates sizeof

在下面的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:在实际代码中,数组是一个结构数组,必须迭代才能进行单元测试。

1 个答案:

答案 0 :(得分:10)

template<class T, size_t S> 
void Check(T (&)[S]) {  
   cout << "Deduced size: " << S << endl;
}