в функции параметров переменной длины знак «…» должен быть последним. И заданные по умолчанию параметры должны быть последними.
Итак, как насчет обоих, необходимых в одной и той же функции?
Теперь у меня есть утилита журнала:
void MyPrint (int32_t logLevel, const char * format, …), который используется для печати журнала в соответствии с ‘logLevel’.
Однако иногда я надеюсь, что он может быть использован как:
MyPrint («Журнал теста номер% d», номер), без необходимости «logLevel».
Вопрос:
Стандартные аргументы и переменные функции
не помогло
В вашем конкретном случае вы можете просто сделать две версии 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);
Других решений пока нет …