gpt4 book ai didi

C++ 在可变参数宏中使用多个参数(实现可选参数)

转载 作者:行者123 更新时间:2023-11-30 02:45:37 25 4
gpt4 key购买 nike

我正在编写一些宏(是的,我知道这很糟糕,但它可以帮助我制作更优化的代码),如下所示:

#define HUGGLE_DEBUG(debug, verbosity) if (Huggle::Configuration::HuggleConfiguration->Verbosity >= verbosity) \
Huggle::Syslog::HuggleLogs->DebugLog(debug, verbosity)

function DebugLog(QString, unsigned int Verbosity = 1) 有可选参数 Verbosity ,我也想在宏中让它成为可选参数,这样我就可以调用

HUGGLE_DEBUG("some debug text");

还有:

HUGGLE_DEBUG("more verbose text", 10);

这有可能吗?注意:我在宏中使用了第二个变量,但如果我没有,我可以将它替换为 1

我的想法是从中创建一个可变参数宏,它会像这样工作:

#define HUGGLE_DEBUG(debug, ...)    Syslog::HuggleLogs->DebugLog(debug, ##__VA_ARGS__)

这会起作用,但它不会使用我在第一个中所做的优化

最佳答案

鉴于您已经在使用宏,您可能不会介意一个非常 hacky 的解决方案:

#define HUGGLE_DEBUG(...) \
if (Huggle::Configuration::HuggleConfiguration->Verbosity >= ((int)(bool)__VA_ARGS__)) \
Huggle::Syslog::HuggleLogs->DebugLog(__VA_ARGS__)

当调用一个参数时:

HUGGLE_DEBUG("abc")

// expands to

if (Huggle::Configuration::HuggleConfiguration->Verbosity >= ((int)(bool)"abc"))
Huggle::Syslog::HuggleLogs->DebugLog("abc")

(bool)"abc"true,因此 (int)(bool)"abc"1.

当使用两个参数调用时:

HUGGLE_DEBUG("abc", 10)

// expands to

if (Huggle::Configuration::HuggleConfiguration->Verbosity >= ((int)(bool)"abc", 10))
Huggle::Syslog::HuggleLogs->DebugLog("abc", 10)

(int)(bool)"abc", 10 使用逗号运算符,因此计算结果为 10

但是 ,请考虑使用内联 函数。无需为此使用宏。

关于C++ 在可变参数宏中使用多个参数(实现可选参数),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24285982/

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