8

fastcgi ライブラリを使用してアプリケーションを作成していますが、その印刷方法は少し冗長です。私は自分のメソッドで fprintf 関数をラップしようとしています:

回したい

FCGX_FPrintF(out, char* fmt, ...);

の中へ

書き込み (char* strFormat, ...);

va_list の魔法を見つけましたが、va_list の値を fprintf 関数に渡す簡単な方法が見つかりません。これを行う方法はありますか?vsprintf と vprintf が存在することは知っているので、想像以上に難しいに違いありません。

他のすべてが失敗した場合は、書き込み関数をオーバーロードします

4

2 に答える 2

14

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 Web サイトに簡単にアクセスすると、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);

というわけで、完成したインターフェースの機能があります。

于 2009-10-10T20:16:15.943 に答える
1

プラットフォームに依存しない方法でこれを行う方法はないと思います。おそらく vsprintf を使用して自分で文字列をフォーマットし、それを印刷機能に送信するだけです。

于 2009-10-10T20:16:42.027 に答える