En mi programa quiero usar las afirmaciones que muestran un mensaje de error. Además de las soluciones bien conocidas para C y C++ existe la solución "real" como BOOST ofrece BOOST_ASSERT_MSG(expr, msg)
(vea también assert() with message)¿Confirmar con mensaje dinámico?
Pero un mensaje estático no es suficiente para mí, también quiero mostrar algunas veces las variables fallidas, p.ej en un caso como
BOOST_ASSERT_MSG(length >= 0, "No positive length found! It is " << length)
Como se puede ver que me gustaría dar formato al mensaje de "cadena" como un stringstream
o ostream
como que habíamos me permitirá mostrar fácilmente tipos personalizados (suponiendo que he definido el relevante función de formateo).
El problema aquí es que BOOST_ASSERT_MSG
requiere de manera predeterminada char const *
, por lo que no es compatible.
¿Hay alguna manera de redefinir/sobrecargar assertion_failed_msg()
de tal manera que usar una secuencia como mensaje funcione? ¿Cómo?
(Mi enfoque ingenuo fallidos como el compilador primero quería hacer un operator<<("foo",bar)
en el mensaje en sí mismo ...)
Por qué 'while (0)'? – WiSaGaN
Consulte http://stackoverflow.com/questions/1067226/c-multi-line-macro-do-while0-vs-scope-block – Greg
Si usa 'while (0)', omita ';'. –