我有一个断言宏,它看起来像:
#define ASSERT(condition, ...) \
(condition) ? (void)0 : MyLogFunction(__LINE__, __VA_ARGS__)
MyLogFunction
也是一个可变参数模板:
template<typename... Args>
void MyLogFunction(int line, const Args&... args) {/*code*/}
除了我不想在断言调用中插入其他信息的情况外,一切都运行良好。
所以这很好用:
ASSERT(false, "test: %s", "formatted");
但这不是:
ASSERT(false);
我相信有一种方法可以处理没有可变参数参数已传递给宏调用的情况,并且有一种方法可以插入简单字符串之类的东西""
而不是__VA_ARGS__