2012-08-24 66 views
1

是否可以防止功能參數評估? 因爲我不想在某些情況下評估函數參數。C++如何防止功能參數評估

E.g. 要記錄調試消息,

void log(int severity, ...); 

我想記錄的消息

log(DEBUG, "%s", getErrorMsg().c_str()); 

如果嚴重性DEBUG,日誌功能僅僅是在發佈二進制返回。 因此,沒有必要評估getErrorMsg();

回答

1

傳遞給函數的任何參數都將在進入函數之前始終進行評估。

您可能希望傳遞類似於指針的東西,因此指針本身就是所評估的內容,並且您只在/必要時通過該指針調用函數。

+0

感謝。我可以知道如何聲明一個通用函數指針,以便我可以通過嗎? –

+0

顯然在這種情況下,你需要類似'char const *(*)()'(指向不帶參數的函數指針並返回指向char的指針)。雖然有些人不喜歡它,但是如果你有'std :: function',那可能值得考慮。 –

+0

是的。由於log函數接受變量參數,因此參數可以是log(DEBUG,「%d,%s」,iValue,getSth(iValue).c_str());是否有可能迎合所有情況? –

1

您可以使用宏:

#define log(severity, ...) if (severity!=DEBUG) log_impl(severity,__VA_ARGS__);