В моей программе я хочу использовать утверждения, отображающие сообщение об ошибке. Помимо известных обходных решений для C и С++ там "реальное" решение как BOOST предлагает BOOST_ASSERT_MSG( expr, msg )
(см. Также assert() с сообщением)
Но статического сообщения для меня недостаточно, я также хочу иногда показывать неудавшиеся переменные, например. в случае типа
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)
в самом сообщении...)