В своей программе я хочу использовать утверждения, которые показывают сообщение об ошибке. Помимо хорошо известных обходных путей для C и 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)
для самого сообщения...)