Передача одного va_list в качестве параметра другому
Я создаю приложение, используя библиотеку fastcgi, и их метод печати немного многословен. Я пытаюсь обернуть их функцию fprintf в свой собственный метод:
Я хотел бы включить
FCGX_FPrintF(out, char* fmt, ...);
в
написать (char* strFormat, ...);
Я нашел магию va_list, но не могу найти простой способ передать значения va_list в их функцию fprintf. Есть ли способ сделать это? Я знаю, что vsprintf и vprintf существуют, поэтому это должно быть сложнее, чем я себе представляю.
Если ничего не помогает, я просто перегружу функцию записи
2 ответа
Вы должны найти аналог vfprintf()
в библиотеке Fast CGI. По крайней мере, умеренно правдоподобно, что он есть; простой способ реализовать FCGX_FPrintF()
является:
void FCGX_FPrintF(FILE *out, char *fmt, ...)
{
va_list args;
va_start(args, fmt);
FCGX_VFPrintF(out, fmt, args);
va_end(args);
}
Поэтому весьма вероятно, что функция существует; вам нужно будет проверить, выставлен ли он официально или нет.
Быстрый визит на сайт Fast CGI показывает, что префикс FCGX используется функциями, объявленными в заголовке fgciapp.h, и который в свою очередь содержит:
/*
*----------------------------------------------------------------------
*
* FCGX_FPrintF, FCGX_VFPrintF --
*
* Performs printf-style output formatting and writes the results
* to the output stream.
*
* Results:
* number of bytes written for normal return,
* EOF (-1) if an error occurred.
*
*----------------------------------------------------------------------
*/
DLLAPI int FCGX_FPrintF(FCGX_Stream *stream, const char *format, ...);
DLLAPI int FCGX_VFPrintF(FCGX_Stream *stream, const char *format, va_list arg);
Итак, функция с интерфейсом завершена.
Я не верю, что есть способ сделать это независимо от платформы. Возможно, я сам отформатировал бы строку, используя vsprintf, а затем просто отправил бы это в функцию печати.