0

これは私の現在の機能ですが、タイプセーフではなく、時々迷惑になることがあります。

void Debug::Log(LogLevel level, const char* format, ...)
{
va_list args;
va_start(args, format);
cout << "[" << LogLevelToString(level) << "]\t";
vprintf(format, args);
va_end(args);
cout << endl;
}

ご覧のとおり、渡された引数を指定された形式でフォーマットしたいと思います。std::cout には書式設定機能があることは知っていますが、C va_list でどのように実装できるかを説明するものは見つかりませんでした。

基本的に主なポイントは次のとおりです。同じ動作を維持したいのですが、タイプ セーフで最新の方法を使用する場合は、std::cout を使用して、出力をファイルまたは必要な場所に簡単にリダイレクトできるようにする必要があります。

役立つポイント: 渡されたパラメーターの数を特定できる形式から、va_list 引数をループして個別に cout に渡す方法はありますか?

ありがとう

4

1 に答える 1

0

簡単にリダイレクトするには、確かにvfprintf(). 各引数の個々の制御/出力についてはva_arg()、正しいタイプ、つまり、、などを使用してリストを通過することan_int = va_arg(the_va_list, int);が唯一の方法だと思いますa_double = va_arg(the_va_list, double);。私は試していませんが、渡されva_argたメモリを使用してメモリを適切にインクリメントすると思います。type

于 2013-01-27T04:24:11.210 に答える