如何在 printf 上创建包装器

How to create a wrapper on printf?

本文关键字:创建 包装 printf      更新时间:2023-10-16

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

>vprintf将参数列表转发到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_;
};