这只是最近几天困扰我的问题,我认为它是无法解决的,但我曾见过模板魔法。
以下是两种获取标准 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]));
}