Tag: 元编程的

编译时间sizeof_array而不使用macros

这只是在过去几天困扰我的东西,我不认为有可能解决,但我以前见过模板魔术。 开始: 要获取标准C ++数组中的元素数量,我可以使用macros(1)或types安全内联函数(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])); } 正如你所看到的,第一个问题是macros(当前我认为是一个问题),另一个问题是编译时不能获取数组的大小。 即我不能写: enum ENUM{N=sizeof_array(ARRAY)}; 要么 BOOST_STATIC_ASSERT(sizeof_array(ARRAY)==10);// Assuming the size 10.. 有谁知道这是否可以解决? 更新 : 这个问题是在constexpr被引入之前创build的。 现在你可以简单地使用: template <typename T> constexpr auto sizeof_array(const T& iarray) { return (sizeof(iarray) / sizeof(iarray[0])); }