define宏定义函数及用模板函数实现同样的功能

最近在看别人的代码的过程中,发现了宏定义代码,由于自己这块之前没有用过,所以编写了示例程序,学习一下宏定义代码。
比如我们现在有一个需求,要实现两个数字交换,这两个数字可能是整型,浮点型或者其他类型,这时我们可能会考虑编写一个函数实现其交换的功能,但是由于数据类型不同,我们可能会将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);

我们发现使用模板函数实现了同样的功能。这两种方式在什么情况下用哪种更好,目前水平有限,请大家分享自己的看法~~

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值