|
e: 在C语言中用 void * 实现泛型(测试程序)
*********************************************************************/
#include
#include "vector.h"
/*
** 输出 char 类型
*/
void output_c(Vector V) {
vec_iterator iter;
for (iter = vec_begin(V); iter != vec_end(V); ++iter) {
printf("%c\n", *(char *)*iter); // 输出时注意 iter 的真正类型是 void **
}
}
/*
** 输出 double 类型
*/
void output_d(Vector V) {
vec_iterator iter;
for (iter = vec_begin(V); iter != vec_end(V); ++iter) {
printf("%.2f\n", *(double *)*iter); // 输出时注意 iter 的真正类型是 void **
}
}
/*
** 测试 char 类型
*/
void test1() {
char ch = 'A';
int cnt = 5;
Vector my_vec = vec_construct(sizeof(char));
while (cnt--) {
vec_push_back(my_vec, &ch);
++ch;
}
output_c(my_vec);
printf("size is %d\n", vec_size(my_vec));
vec_destruct(my_vec);
}
/*
** 测试 double 类型
*/
void test2() {
double d = 3.142;
int cnt = 13;
Vector my_vec = vec_construct(sizeof(double));
while (cnt--) {
vec_push_back(my_vec, &d);
++d;
}
output_d(my_vec);
printf("size is %d\n", vec_size(my_vec));
vec_destruct(my_vec);
}
int main(int argc, char **argv) {
test1();
printf("\n");
test2();
return 0;
}
4、运行结果
A
B
C
D
E
size is 5
3.14
4.14
5.14
6.14
7.14
8.14
9.14
10.14
11.14
12.14
13.14
14.14
15.14
size is 13
请按任意键继续. . .
因为元素类型为 void *,故迭代器类型为 void **,所以在输出时需注意将 void * 强制类型转换为 data_type *,然后再解引用。
|