gpt4 book ai didi

c++ - 断言动态消息?

转载 作者:可可西里 更新时间:2023-11-01 15:55:47 28 4
gpt4 key购买 nike

在我的程序中,我想使用显示错误消息的断言。除了众所周知的 C 和 C++ 解决方案外,还有 BOOST 提供的“真正”解决方案 BOOST_ASSERT_MSG( expr, msg ) (另见 assert() with message)

但是静态消息对我来说还不够,有时我还想显示失败的变量,例如在这样的情况下

BOOST_ASSERT_MSG( length >= 0, "No positive length found! It is " << length )

如您所见,我想将消息“字符串”格式化为 stringstreamostream因为这样我就可以轻松显示自定义类型(假设我已经定义了相关的格式化函数)。

这里的问题是 BOOST_ASSERT_MSG默认情况下需要 char const *所以这是不兼容的。

有没有办法重新定义/重载assertion_failed_msg()以这样一种方式使用流作为消息会起作用吗?怎么样?
(我的天真方法失败了,因为编译器首先想对消息本身执行 operator<<("foo",bar)...)

最佳答案

你可以定义你自己的宏

#define ASSERT_WITH_MSG(cond, msg) do \
{ if (!(cond)) { std::ostringstream str; str << msg; std::cerr << str.str(); std::abort(); } \
} while(0)

关于c++ - 断言动态消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11921864/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com