【发布时间】:2025-12-11 03:30:01
【问题描述】:
在我的程序中,我想使用显示错误消息的断言。除了众所周知的 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)...)
【问题讨论】: