-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__)
#define MAX_SIZE可以作爲一個int模板類,其中成員是常量和值是100000,至於STRINGIFY或MY_THROW我敢肯定,這些可以更改爲模板 –
依賴。對於某些人來說,這可能是可能的,而對其他人來說則可能。 –
@downvoters這個問題有什麼問題? –
不,您不能將任何**宏轉換爲模板。 – bolov