traits是个很好玩的东西,在泛型编程里面很常见。最早出于老外的一篇论文。http://www.cantrip.org/traits.html?seenIEPage=1 建议仔细阅读。
首先我们来看一段代码。
template<class T>
T accum(const T* ptr, int len)
{
T total = T();
for (int i = 0; i < len; i++)
{
total += *(ptr + i);
}
return total;
}
这是个模板函数,很简单,就是把传进来的参数累加,返回结果。
那么这段代码有什么问题呢?
我们写几行代码来测试一下:
int sz[] = {1, 2, 3, 4, 5};
int v1 = accum(&sz[0], 5) / 5;
char str[] = {'a', 'b', 'c', 'd', 'e'};
char v2 = accum(&str[0], 5) / 5;
前面两行代码把1,2,3,4,5累加然后去平均值。后面两行代码把abcde累计,然后取平均值。
运行结果如下: