在条件内调用void函数 - 在if中声明

时间:2017-06-30 11:20:54

标签: c++ visual-c++ macros assert

我是否忽略了任何秘密技巧,可能是在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; } } ( )

0 个答案:

没有答案