gpt4 book ai didi

c++ - 在 C++ 的可变长度函数中,将默认值参数放在何处?

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

在可变长度参数函数中,'...' 必须放在最后。启用默认值的参数也必须在最后。

那么,在同一个函数中同时需要两者怎么样?

现在我有了一个日志实用程序:void MyPrint(int32_t logLevel, const char *format, ...),用于根据'logLevel'打印日志。

但是,有时我希望它可以用作:MyPrint("Log test number%d", number),不需要'logLevel'。

问题: Default arguments and variadic functions没有帮助。

最佳答案

在您的特定情况下,您可能只想制作两个版本的 MyPrint,例如:

MyPrint(const char *format, ...)
{
_logLevel = 1;
// stuff
}
MyPrint(int32_t logLevel, const char *format, ...)
{
_logLevel = logLevel;
//stuff
}

另一方面,Named Parameter Idiom确实会提供替代解决方案:

class Abc
{
public:
MyPrint(const char *format, ...)
{
_logLevel = 1;
// stuff
}
Abc &setLogLevel(int32_t logLevel)
{
_logLevel = logLevel;
}

// stuff

};

所以你可以这样调用 MyPrint():

MyPrint("blah,blah", 123);

或者像这样:

MyPrint("blah,blah", 123).setLogLevel(5);

关于c++ - 在 C++ 的可变长度函数中,将默认值参数放在何处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16143238/

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