归档 2011年10月13日

最后更新于 .


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
size_t arrarysize(T (&array)[N]) { return N; }

这样,当传入指针的时候,编译就会报错了。
而同时你肯定也能看出,我们甚至能指定只能传入数组长度为固定某数字的数组了,怎么做我就不用讲了吧 ...

昨天

2011年9月29日

明天

2011年10月23日

归档