gpt4 book ai didi

c++ - 具有返回值的 Alexandrescus 智能断言

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:01:34 25 4
gpt4 key购买 nike

我正在为我的断言工具使用 Andrei Alexandrescus 智能断言技术,基本上接口(interface)是:

ASSERT( foo == bar, "Foo doesn't equal bar!" )( foo )( bar );

事实证明,通常当断言不成立时,人们想要提前退出,这导致我出现以下重载:

ASSERT( foo == bar, "Foo doesn't equal bar!", 0 )( foo )( bar )

可悲的是,它所基于的递归宏技巧的一个局限性是宏必须以另一个宏结束,这个宏会启动所有内容,这导致我使用以下代码来支持返回值:

#define ASSERT3( expr, msg, ret ) \  
if( (expr) ); \
else \
return ret + MakeAssert().AddContext( #expr, msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__ ).SMART_ASSERT_A

通过为 Assert 类重载 operator+() 效果很好,但这是我目前面临的问题和问题:无法使用此方法对于返回 void 的函数、构造函数或析构函数。

最佳答案

虽然不是很令人满意,但我发布这个只是为了以防万一这可能是一个提示给你:

#define ASSERT3( expr, msg, ret, ... )                                  \
if( (expr) ); \
else { \
MakeAssert().AddContext(....).SMART_ASSERT_A __VA_ARGS__; \
return ret; \
}

ASSERT3( foo == bar, "...", 0, ( foo )( bar ) ) // usage

关于c++ - 具有返回值的 Alexandrescus 智能断言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5505725/

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