gpt4 book ai didi

c++ - 编译时 sizeof_array 不使用宏

转载 作者:IT老高 更新时间:2023-10-28 22:15:40 37 4
gpt4 key购买 nike

这只是过去几天一直困扰我的事情,我认为不可能解决,但我以前见过模板魔术。

这里是:

要获取标准 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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com