尋找一種方法可以做到便攜,安全,元素計數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