用于确定数组大小的模板函数
考虑下面的模板函数:
template<typename T, size_t n> size_t array_size(const T (&)[n]) { return n; }
此模板的用途是确定作为参数传递的数组的大小。通过引用传递数组会保留其大小,而不是简单地获取指针。
说明
要理解这一点,请考虑以下内容:
在我们的模板函数中,数组通过引用传递,确保捕获其大小。模板自动推导尺寸 (n) 和元素类型 (T)。这允许我们将其用作:
size_t array_size(const int (&)[3]) { return 3; }
,可以按如下方式使用:
size_t size_of_a = array_size(a);
高级用法
有一个该技术的变体允许编译时大小确定:
template<typename T, size_t n> char (& array_size(const T (&)[n]) )[n];
此模板返回对大小为 n 的 char 类型数组的引用。因此,以下代码将在编译时给出传递的数组的大小:
size_t size_of_a = sizeof(array_size(a));
此构造启用编译时确定的数组大小,支持以下操作:
int havingSameSize[sizeof(array_size(a))];
以上是模板函数如何在编译时确定 C 数组的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!