在c ++中将缺省值参数放在可变长度函数中的位置?

时间:2013-04-22 09:07:03

标签: c++ parameters default-value variable-length

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

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

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

然而,有时我希望它可以用作: MyPrint(“记录测试号%d”,编号),不需要“logLevel”。

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

1 个答案:

答案 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);