Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;输出格式化变量参数列表的最佳方法_C++_Debugging_Cout_Variadic Functions - Fatal编程技术网

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

C++ C++;输出格式化变量参数列表的最佳方法,c++,debugging,cout,variadic-functions,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 << end

这是我目前的功能,它可以工作,但不是类型安全的,有时会变得烦人

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;
}
void Debug::Log(日志级别,常量字符*格式,…)
{
va_列表参数;
va_开始(参数,格式);

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

你可以使用可变模板来实现类型安全
printf
。我只是编辑了一点问题。我只想使用std::cout,所以我只需要在我想重拨时管理它将输出直接输出到文件或任何地方。我真的不想触摸标准输出(cout和printf)我试图远离C函数。我的观点是,你可以保留现在调用它的语法,用一个可变模板替换C VARARGS,使它成为类型化。GCC是否支持C++ 11个特性?我也尝试保持这个多平台,很多。这里有一个。无法使用va_列表以类型安全的方式执行任何操作。