这只是过去几天困扰我的事情,我认为不可能解决,但我以前见过模板魔术。
开始:
要获取标准 C++ 数组中的元素数量,我可以使用宏 (1) 或类型安全的内联函数 (2):
(1)
#define sizeof_array(ARRAY) (sizeof(ARRAY)/sizeof(ARRAY[0]))
(2)
template <typename T>
size_t sizeof_array(const T& ARRAY){
return (sizeof(ARRAY)/sizeof(ARRAY[0]));
}
如您所见,第一个存在宏的问题(目前我认为这是一个问题),而另一个存在无法在编译时获取数组大小的问题;即我不能写:
enum ENUM{N=sizeof_array(ARRAY)};
或者
BOOST_STATIC_ASSERT(sizeof_array(ARRAY)==10);// Assuming the size 10..
有谁知道这是否可以解决?
更新:
这个问题是在引入 constexpr 之前创建的。现在你可以简单地使用:
template <typename T>
constexpr auto sizeof_array(const T& iarray) {
return (sizeof(iarray) / sizeof(iarray[0]));
}