C++ 如何编写能用于数组的泛型函数?
时间: 2024-05-05 16:19:16 浏览: 250
要编写能用于数组的泛型函数,可以使用 C 语言的泛型指针 void*,将数组的元素转换为 void* 类型,再进行操作。例如,下面是一个计算数组元素之和的泛型函数示例代码:
```c
#include <stdio.h>
// 泛型函数,计算数组元素之和
int sum(void* arr, int count, size_t size, int (*get)(void*, int))
{
int total = 0;
for (int i = 0; i < count; i++) {
void* elem = (char*)arr + i * size; // 指向第 i 个元素的指针
total += get(elem, i);
}
return total;
}
// 整型数组元素的获取函数
int get_int(void* elem, int index)
{
int* p = (int*)elem;
return *p;
}
int main()
{
int arr[] = {1, 2, 3, 4, 5};
int count = sizeof(arr) / sizeof(arr[0]);
int total = sum(arr, count, sizeof(int), get_int);
printf("total = %d\n", total);
return 0;
}
```
在上面的代码中,sum 函数的参数 arr 表示数组的起始地址,count 表示数组的元素个数,size 表示数组元素的大小,get 函数是对数组元素进行操作的回调函数。get 函数的第一个参数 elem 是指向数组元素的指针,在函数内部需要将其转换为合适的类型,并返回相应的计算结果。
示例代码中,get_int 函数是获取整型数组元素的回调函数,其接收一个 void* 类型的指针和该元素的下标,将指针转换为 int* 类型,并返回该元素的值。最后,main 函数利用 sum 函数计算数组元素之和,并输出结果。
阅读全文