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语言的泛型编程并不完善,并没有足够的类型检查,所以很容易出错。
时间: 2024-10-25 05:28:52