C ++ - 可变函数和cout

时间:2012-02-24 18:18:37

标签: c++ logging io

我有一个接受可变参数的记录功能。这适用于android logging和printf,但我想对std :: 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);
    }

1 个答案:

答案 0 :(得分:2)

不要尝试为C ++流使用可变参数包装器,只需使用相应的C API,例如vprintf / vnsprintf。以这种方式包装流只会丢掉所有好处并导致额外的复杂性。

为什么不让您的包装器API使用流,并将它们映射到Android平台上的printf。这样,您就可以获得流的所有好处,并且只会在原本不支持它们的平台上丢失它们。