Где разместить параметр значения по умолчанию в функции переменной длины в C++?

В функции параметров переменной длины знак "..." должен быть последним. И заданные по умолчанию параметры должны быть последними.

Итак, как насчет обоих, необходимых в одной и той же функции?

Теперь у меня есть утилита журнала: void MyPrint(int32_t logLevel, const char *format, ...), которая раньше печатала журнал в соответствии с 'logLevel'.

Тем не менее, иногда я надеюсь, что его можно использовать как: MyPrint("Журнал теста номер%d", номер), без необходимости "logLevel".

Вопрос: стандартные аргументы и переменные функции не помогли.

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);
Другие вопросы по тегам