2012-02-24 72 views
2

我有一個接受可變參數的日誌函數。這適用於說android日誌記錄和printf,但我想要做與std :: cout和文件流一樣。有沒有簡單的方法來解決這個問題?C++ - 可變參數函數和cout

void LogManagerImpl::LogInfo(const char* msg, ...) 
    { 
     va_list argptr; 
     va_start(argptr, msg); 

     /* Log to stdout */ 
     if (mLogToStdOut) 
     { 
      #ifdef ANDROID 
       __android_log_vprint(ANDROID_LOG_INFO, __ENGINE_LOG_TAG, msg, argptr); 
      #elif defined _WIN32 || _WIN64 
       //printf ("%s:%s",__ENGINE_LOG_TAG,"INFO:"); vprintf(msg, argptr); printf("\n"); 
       // how do I do the same as above except with for example std::cout? 
      #endif 
     } 

     /* Log to file */ 
     if (mLogToFile) 
     { 
         // TODO 

     } 

     va_end(argptr); 
    } 
+0

Variadric參數? – 2012-02-24 18:30:23

回答

2

不要試圖使用C++流的可變參數的包裝,只是用相應的C API,如vprintf/vnsprintf。以這種方式包裝流只會拋棄所有的好處並導致更多的複雜性。

爲什麼不讓你的包裝API使用流,並將它們映射到Android平臺上的printf。這樣你就可以獲得流的所有好處,並且只會在不支持本地支持的平臺上丟失它們。

+0

但是後來我面臨同樣的問題,但相反,如何獲取所有'<<'輸入並正確格式化爲Android,la printf()? – KaiserJohaan 2012-02-24 19:21:26

+0

只需使用一個使用stdio函數的流庫來引擎蓋?使用語言環境替換的IOstream的簡單版本並不是什麼大問題。 – 2012-02-24 19:26:46