2

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

4

1 回答 1

10
template<class T, size_t S> 
void Check(T (&)[S]) {  
   cout << "Deduced size: " << S << endl;
}
于 2009-12-09T13:15:40.493 回答