各种用C 语言实现的模板可能在使用形式上有所不同。现以一个求和函数Sum 为例,用C++ Template 可写如下:
template R Sum(const T *array, int n)
{
R sum = 0;
for (int i = 0 ; i < n ; ++i)
sum += i;
return sum;
}
如果不是内置类型,该模板隐式地需要有R R::operator+=(T)运算符可用。
1. 使用函数指针作为Functor 替换者
Typedef struct tagAddClass
{
Void (*add)(char* r1, const char* r2);
Int elemSize;
Char sum[MAX_ELEM_SIZE];
} AddClass;
void Sum(AddClass* self, const char* array, int n)
{
for (int i = 0 ; i < n ; ++i)
self->add(self->sum, array + i*self->elemSize);
}
使用时: