How can a template function 'know' the size of the array given as template argument?

点点圈 提交于 2019-11-28 05:53:41

问题


In the C++ code below, the templated Check function gives an output that is not what I would like: it's 1 instead of 3. I suspect that K is mapped to int*, not to int[3] (is that a type?). I would like it to give me the same output than the second (non templated) function, to which I explicitly give the size of the array...

Short of using macros, is there a way to write a Check function that accepts a single argument but still knows the size of the array?

#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));
}

Thanks.

PS: In the real code, the array is an array of structs that must be iterated upon for unit tests.


回答1:


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


来源:https://stackoverflow.com/questions/1873773/how-can-a-template-function-know-the-size-of-the-array-given-as-template-argum

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!