在我的程序中,我想使用顯示錯誤消息的斷言。除了C和C衆所周知的解決辦法++有「真實」的解決方案,BOOST提供BOOST_ASSERT_MSG(expr, msg)
(也assert() with message見)斷言與動態消息?
但是靜態信息是不夠的,我也想有時顯示失敗的變量,例如像
BOOST_ASSERT_MSG(length >= 0, "No positive length found! It is " << length)
的情況下,你可以看到,我想格式化消息「字符串」作爲stringstream
或ostream
爲會允許我輕鬆地顯示自定義類型(假設我已經定義了相關的格式化功能)。
這裏的問題是,BOOST_ASSERT_MSG
默認需要char const *
,因此不兼容。
有沒有辦法重新定義/重載assertion_failed_msg()
這樣一種方式,使用流作爲消息將工作?怎麼樣?
(我幼稚的做法失敗,因爲編譯器首先想做消息本身的operator<<("foo",bar)
...)
爲什麼'while(0)'?是最優化的,它避免了宏參數
msg
指定的代價昂貴的字符串操作。 – WiSaGaN 2012-08-12 13:08:39請參閱http://stackoverflow.com/questions/1067226/c-multi-line-macro-do-while0-vs-scope-block – Greg 2012-08-12 13:10:04
如果使用'while(0)',則省略';'。 – 2012-08-12 13:42:00