首页 > 代码库 > C语言的泛型编程

C语言的泛型编程

1 问题引入

  首先引入一个问题,实现一个泛型的swap函数,分别使用C++和C实现。

2 C++的泛型

  C++有良好的泛型编程机制,所以我很快就写出了C++版的泛型swap函数。

template<typename T>void MySwap(T &a, T &b){	T c = a;	a = b;	b = c;}

3 C语言的泛型

  我的第一想法是既然不能直接交换变量(类型不知道),那就交换指针呀。下一瞬间,我就很想给自己一巴掌!是左值吗你就交换指针?Stupid!

  那就多传入一个参数喽,把大小传进去吧,然后我们直接根据大小来交换内存好了。好想法:

void MySwapC(void* a, void *b, int size){	void *p = (void*)malloc(size);	assert(p != NULL);	memcpy(p, a, size);	memcpy(a, b, size);	memcpy(b, p, size);}

4 总结

  运用一定的技巧,C语言也可以实现一定功能的泛型编程,但编程的时候一定要多加小心,C语言的泛型编程并不完善,并没有足够的类型检查,所以很容易出错。

C语言的泛型编程