2016-07-06 170 views
-1

我想寫一個有條件的printf,這樣如何在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

看看vprintf:http://en.cppreference.com/w/cpp/io/c/vfprintf –

+0

不,我不想使用它,我需要了解我的程序有什麼問題。 –

+1

你的程序有什麼問題是你沒有使用它。它旨在將va_list轉發到printf! –

回答

0

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