在C语言中实现泛型的最佳实践案例是使用宏定义和函数指针。以下是一个简单的例子:
#include <stdio.h>
// 定义一个泛型的结构体,包含一个void*指针和一个函数指针
typedef struct {
void* data;
void (*printFunc)(void*);
} GenericData;
// 定义一个打印整数的函数
void printInt(void* data) {
printf("%d\n", *(int*)data);
}
// 定义一个打印浮点数的函数
void printFloat(void* data) {
printf("%f\n", *(float*)data);
}
int main() {
int intValue = 10;
float floatValue = 3.14;
// 创建一个存储整数的泛型结构体
GenericData intData = {&intValue, printInt};
// 调用打印函数
intData.printFunc(intData.data);
// 创建一个存储浮点数的泛型结构体
GenericData floatData = {&floatValue, printFloat};
// 调用打印函数
floatData.printFunc(floatData.data);
return 0;
}
在这个例子中,我们定义了一个泛型的结构体GenericData
,该结构体包含一个void*
类型的指针和一个函数指针,用于调用相应类型的打印函数。通过创建不同类型的泛型结构体,并传入相应的数据和打印函数,实现了对不同类型数据的泛型处理。