2012-02-24 158 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