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



这是我当前的函数,它可以工作但不是类型安全的,有时会很烦人。

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?

谢谢

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

相关内容

最新更新