本文有更新,請移步個人我的博客:https://blog.andyqiao.top/article/13/編程
首先引入一個問題,實現一個泛型的swap函數,分別使用C++和C實現。函數
C++有良好的泛型編程機制,因此我很快就寫出了C++版的泛型swap函數。spa
template<typename T> void MySwap(T &a, T &b) { T c = a; a = b; b = c; }
個人第一想法是既然不能直接交換變量(類型不知道),那就交換指針呀。下一瞬間,我就很想給本身一巴掌!是左值嗎你就交換指針?Stupid!指針
那就多傳入一個參數嘍,把大小傳進去吧,而後咱們直接根據大小來交換內存好了。好想法:blog
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); }
運用必定的技巧,C語言也能夠實現必定功能的泛型編程,但編程的時候必定要多加當心,C語言的泛型編程並不完善,並無足夠的類型檢查,因此很容易出錯。內存