作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
这只是过去几天一直困扰我的事情,我认为不可能解决,但我以前见过模板魔术。
这里是:
要获取标准 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]));
}
最佳答案
从 here 尝试以下操作:
template <typename T, size_t N>
char ( &_ArraySizeHelper( T (&array)[N] ))[N];
#define mycountof( array ) (sizeof( _ArraySizeHelper( array ) ))
int testarray[10];
enum { testsize = mycountof(testarray) };
void test() {
printf("The array count is: %d\n", testsize);
}
应该打印出:“数组计数为:10”
关于c++ - 编译时 sizeof_array 不使用宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1500363/
这只是过去几天一直困扰我的事情,我认为不可能解决,但我以前见过模板魔术。 这里是: 要获取标准 C++ 数组中的元素数量,我可以使用宏 (1) 或类型安全的内联函数 (2): (1) #define
我是一名优秀的程序员,十分优秀!