首先一个简单的问题,如何实现交换两个整数的值? 想必每个有编程经验的人都能作答。
C语言用指针实现如下:
void swap(int * a, int * b){ int tmp = *a; *a = *b; *b = tmp; }
void swap(int & a, int & b){ int tmp = a; a = b; b = tmp; }
void swap(int & a, int & b){ a = a + b; b = a - b; a = a - b; }
void swap(int & a, int & b){ a = a ^ b; b = a ^ b; a = a ^ b; }
新问题的C语言实现如下:
void swap(void * a, void * b, int size){ char * tmp = malloc(size * sizeof(char)); memcpy(tmp, a, size * sizeof(char)); memcpy(a, b, size * sizeof(char)); memcpy(b, tmp, size * sizeof(char)); free(tmp); }
新问题的C++函数模板实现如下:
template<class T> void swap(T & a, T & b){ a = a + b; b = a - b; a = a - a; }
//swap.h template<class T> void swap(T & a, T & b); #include "swap.cpp"
//swap.cpp template<class T> void swap(T & a, T & b){ a = a + b; b = a - b; a = a - b; }
最好的方法是,将函数模板的定义直接放在头文件中,不要在.cpp文件中。
C和C++中泛型编程 - 适应不同类型参数的函数,布布扣,bubuko.com
原文地址:http://blog.csdn.net/seanwang_25/article/details/26283015