在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*
類型的指針和一個函數指針,用于調用相應類型的打印函數。通過創建不同類型的泛型結構體,并傳入相應的數據和打印函數,實現了對不同類型數據的泛型處理。