2

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

那么,在同一个功能中需要两者怎么样?

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

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

问题: 默认参数和可变参数函数 没有帮助。

4

1 回答 1

1

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

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

另一方面,命名参数习语确实会提供另一种解决方案:

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);
于 2013-05-02T08:37:37.807 回答