如何在printf上创建包装器?

时间:2016-07-06 12:31:34

标签: c++ printf variadic-functions

我想写一个条件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(...)十亿次。

1 个答案:

答案 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_;
};