最近在看别人的代码的过程中,发现了宏定义代码,由于自己这块之前没有用过,所以编写了示例程序,学习一下宏定义代码。
比如我们现在有一个需求,要实现两个数字交换,这两个数字可能是整型,浮点型或者其他类型,这时我们可能会考虑编写一个函数实现其交换的功能,但是由于数据类型不同,我们可能会将copy一遍,仅仅是替换不同的类型。
#宏定义函数
那有没有一种更加通用的方式呢,宏定义函数给了我们一种选择,示例如下:
#define swap(x,y)\
x=x+y;\
y=x-y;\
x = x - y;\
注意\后面不能有任何内容,注释也不可以。
调用宏定义函数代码如下:
int x = 10;
int y = 50;
TRACE("Before swap:x=%d,y=%d\n", x, y);
swap(x, y);
TRACE("After swap:x=%d,y=%d\n", x, y);
float f1 = 12.345;
float f2 = 45.789;
TRACE("Before swap:f1=%f,f2=%f\n", f1, f2);
swap(f1, f2);
TRACE("After swap:f1=%f,f2=%f\n", f1, f2);
#模板函数
这时会突然想到用模板函数能不能实现同样的功能呢,模板函数定义如下:
template <typename T>
inline void swapT(T &a, T &b)
{
a = a + b;
b = a - b;
a = a - b;
}
调用模板函数代码如下:
TRACE("Before swapT:x=%d,y=%d\n", x, y);
swapT(x, y);
TRACE("After swapT:x=%d,y=%d\n", x, y);
TRACE("Before swapT:f1=%f,f2=%f\n", f1, f2);
swapT(f1, f2);
TRACE("After swapT:f1=%f,f2=%f\n", f1, f2);
我们发现使用模板函数实现了同样的功能。这两种方式在什么情况下用哪种更好,目前水平有限,请大家分享自己的看法~~