2016-02-13 150 views
-3

是否可以将任何宏转换为模板?
在我们公司,我们有一个庞大的宏代码库,我们想知道这样的转换是否可能。将宏转换为模板

+2

依赖。对于某些人来说,这可能是可能的,而对其他人来说则可能。 –

+0

@downvoters这个问题有什么问题? –

+1

不,您不能将任何**宏转换为模板。 – bolov

回答

3

对于一些宏,你可以,你应该。例如东西,如

#define MAX(a, b) ((a) > (b) ? (a) : (b)) 

这是所有标准的原因,一个坏的宏:主要是,它不是类型安全的,并评估其参数不止一次。您可以使用此模板替换它:

template <typename T> 
T max(T a, T b) { return a > b ? a : b; } 

这没有前宏的缺点。

但是,一些宏不能轻易(或完全)被转换;不仅是明显的东西,有

#define MAX_SIZE 100000 

而且宏,使用预处理的一些特殊行为,如

#define STRINGIFY(c) #c 
#define MY_THROW  throw MyException(__FILE__, __LINE__) 
+0

#define MAX_SIZE可以作为一个int模板类,其中成员是常量和值是100000,至于STRINGIFY或MY_THROW我敢肯定,这些可以更改为模板 –