在可变长度参数函数中,'...'必须放在最后。默认值启用参数也必须是最后一个。
那么,在同一个函数中需要两个怎么样?
现在我有一个日志工具: void MyPrint(int32_t logLevel,const char * format,...),用于根据'logLevel'打印日志。
然而,有时我希望它可以用作: MyPrint(“记录测试号%d”,编号),不需要“logLevel”。
问题: Default arguments and variadic functions 没有帮助。
答案 0 :(得分:1)
在您的具体情况下,您可能只想制作两个版本的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);