寻找一种方法可以做到便携,安全,元素计数C风格的数组,我发现这个解决方案:是便携式的函数引用sizeof?
template <typename T, unsigned N> char (&arrayCountofHelper(T(&)[N]))[N];
#define ARRAY_COUNTOF(arr) (sizeof(arrayCountofHelper(arr)))
好像arrayCountofHelper实际上是一个函数的引用,和宏ARRAY_COUNTOF用途一个函数的大小是它的返回类型的大小这一事实。
它工作得很好。
但是,当我试图检查它是否可移植时,我没有找到任何证据。我无法在标准(14882/1998)中找到对sizeof(函数引用)的任何引用,事实上,我不完全确定我可以甚至创建一个函数引用(尽管标准提到了几个次)。
那么,有人知道我应该看什么标准吗? (或者,如果我误解了声明一些如何,什么是正确的解释?)
感谢
奥伦
附: (对于那些你们谁认为我没有找到我的问题的合适的解决方案)
我知道我可以随时使用
#define ARRAY_COUNTOF sizeof(arr)/sizeof(arr[0])
甚至
template <typename T, unsigned N> size_t arrayCountof(T(&)[N]) {return N;}
,但首先会不会检查arr是一个数组(或指针),第二个在static_assert内不可用。
(我会使用的std :: TR1 ::阵列或std ::矢量,但是这是一个旧的代码我维持)
查看此答案的其他解释:http://stackoverflow.com/questions/437150/can-someone-explain-this-template-code-that-gives-me-the-size-of-an-array/437178#437178(底部) – 2010-05-31 20:27:58