我想写一个条件printf,就像这样
class ConditionalPrintf
{
public:
ConditionalPrintf(bool print)
: print_(print)
{}
void printf(int x, double y, char b, const char* format, ...) const
{
// use x, y and b
va_list argptr;
va_start(argptr, format);
if (print_)
printf(format, argptr);
va_end(argptr);
}
private:
bool print_;
};
但它打印垃圾。有什么不对的吗?可能隐含这个参数改变了什么吗?
另外,如果这不是一个好主意,还有哪些其他解决方案?我只是不想写if (print) printf(...)
十亿次。
答案 0 :(得分:1)
vprintf
将arg列表转发给printf
#include <stdio.h>
#include <stdarg.h>
class ConditionalPrintf
{
public:
ConditionalPrintf(bool print)
: print_(print)
{}
void printf(int x, double y, char b, const char* format, ...) const
{
// use x, y and b
va_list argptr;
va_start(argptr, format);
if (print_)
vprintf(format, argptr);
va_end(argptr);
}
private:
bool print_;
};