Где разместить параметр значения по умолчанию в функции переменной длины в 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);