C++的模板其实是个挺纠结的东西,用的不好的话,编译的一堆错误够你调到崩溃,但要是用的好呢,又确实非常方便,我们来看看
一.获取数组长度
比如
int arr[10];
怎么获取 arr 的长度呢? 最简单的代码:
uint32_t count = sizeof(arr) / sizeof(arr[0]);
但是这样也带来一个问题,万一是个新手程序员:
int *p = arr;
uint32_t count = sizeof(p) / sizeof(p[0]);
就有问题了…… 那么有没有办法,有一种安全的方法,当发现传入的是指针的时候,自动编译报错呢? 有的,模板里面可以推导出数组的长度。 所以我们可以使用如下代码
template <typename T, size_t N>
size_t arrarysize(T (&array)[N]) { return ...