gpt4 book ai didi

c++ - 可变宏参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:56:21 27 4
gpt4 key购买 nike

我有一个断言宏,它看起来像:

#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__

最佳答案

这并不是宏的真正解决方案,但一个简单的解决方法是提供一个辅助可变函数模板,它可以获得 0 个参数并在那里进行条件检查:

#define ASSERT(...) \
MyLogHelper(__LINE__, __VA_ARGS__)

template<typename... Args>
void MyLogFunction(int line, const Args&... ) {/*code*/}

template<typename... Args>
void MyLogHelper(int line, bool condition, const Args&... args)
{
if (!condition) MyLogFunction(line,args...);
}

关于c++ - 可变宏参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18167956/

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