Vit*_*meo 5 c++ macros assert c++11
我想创建在中定义的assert
宏的自定义版本,<cassert>
在断言失败时显示错误消息。
所需用法:
custom_assert(AClass<T1, T2>::aBoolMethod(), "aBoolMethod must be true");
测试实现有缺陷:
#define custom_assert(mCondition, mMessage) ...
// This fails because mCondition may have commas in it
#define custom_assert(..., mMessage)
// Not sure about this either - mMessage may be an expression containing commas
// as well
Run Code Online (Sandbox Code Playgroud)
如何正确实现一个自定义断言,该自定义断言将布尔表达式(可能带有逗号)作为第一个参数,并将字符串表达式(可能带有逗号)作为第二个参数?
还是有一种不使用宏来实现断言的方法?
你已经非常接近了,你需要使用的只是这样:
#define myAssert(message, ...) do { \
if(!(__VA_ARGS__)) { \
/*error code*/ \
} \
} while(0)
Run Code Online (Sandbox Code Playgroud)
特殊的预处理器变量__VA_ARGS__
将扩展到在三个点的位置传递的任何内容,包括所有逗号。
请注意,预处理器至少不会解释条件中的逗号,它只会将它们按原样粘贴到语句中if()
。如果您想传递模板化条件,这正是您想要的,正如注释所暗示的那样。
消息字符串中的逗号也不是问题,因为预处理器理解字符串文字并且不会解释双引号内的任何内容。
归档时间: |
|
查看次数: |
1968 次 |
最近记录: |