C ++输出格式化变量参数列表的最佳方法

时间:2013-01-27 03:35:21

标签: c++ debugging cout variadic-functions

这是我当前的功能,但不是类型安全的,有时会让人讨厌。

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?

由于

1 个答案:

答案 0 :(得分:0)

为了便于重定向,您当然可以使用vfprintf()。对于每个参数的单独控制/ cout,我认为唯一的方法是va_arg()使用正确的类型通过列表,即an_int = va_arg(the_va_list, int);a_double = va_arg(the_va_list, double);,等等。我没有尝试,但我认为va_arg将使用传递给它的type对内存进行适当的增量。