我是否忽略了任何秘密技巧,可能是在C ++ 11/14中,允许我在if语句的最高范围内调用DebugBreak()
(void函数)?
如果DebugBreak()
会返回任何内容,我猜它会“微不足道”。
背景
在我写一篇专门的Assert-function时,我陷入了困境。目前,代码如下所示:
if ( MyClass* instance = GetLastObject() )
我想添加一个开发人员可以插入的CHK()宏:
if ( MyClass* instance = CHK( GetLastObject() ) )
如果CHK()
内的条件为假,则会显示断言。使用一些 Lambda魔法我可以在DebugBreak()
宏内部调用CHK
并且它工作正常,除了执行在 Lambda ;强迫开发人员在被调用时向下移动一步。
如果我可以强制编译器内联lambda,那也可以工作,但我也没有找到任何方法。
编辑: CHK(f)
宏的简化版,抱歉格式化:
[&]() {auto CHK_test = (f); if (CHK_test) return CHK_test; else { __debugbreak(); return (decltype(CHK_test))0; } } ( )