2016-02-13 193 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我敢肯定,這些可以更改爲模板 –