在C语言中,我们不能直接实现像C++或Java中的那种泛型编程,但我们可以使用一些技巧模拟实现泛型。
我们通常使用 void*
类型的指针来实现泛型功能。void*
是一种特殊类型的指针,可以指向任意类型的数据。
例如,假设你想编写一个可以接受任意类型数据的函数,那么可以使用 void*
指针作为该函数的参数。
下面给出一个简单的示例:
#include <stdio.h>
void PrintValue(void* ptr, char type) {
switch (type) {
case 'i':
printf("%dn", *(int*)ptr);
break;
case 'c':
printf("%cn", *(char*)ptr);
break;
case 'f':
printf("%fn", *(float*)ptr);
break;
default:
printf("Unsupported type.n");
break;
}
}
int main() {
int i = 1;
char c = 'a';
float f = 3.14;
PrintValue(&i, 'i');
PrintValue(&c, 'c');
PrintValue(&f, 'f');
return 0;
}
也可以使用#define
和typedef
抽象出数据类型,实现类似泛型的功能。这要求对宏和预处理有一定的理解。
例如,假设你想实现一个通用的迭代器:
#include <stdio.h>
#define define_iterator(T)
typedef struct T ## Iterator {
T* ptr;
T* (*next)(struct T ## Iterator*);
} T ## Iterator;
// 然后你可以这样定义一个 int 的迭代器
define_iterator(int)
int* nextInt(T ## Iterator* self) {
return self->ptr++;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
intIterator it = {arr, nextInt};
for (int i = 0; i < 5; ++i)
printf("%d ", *it.next(&it));
return 0;
}
以上代码定义了一个可以用于任何类型 T
的迭代器,然后通过define_iterator(int)
生成了一个用于类型 int
的迭代器。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/172783.html