C ++ - переменные функции и cout - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть функция регистрации, которая принимает переменные параметры.Это прекрасно работает, скажем, для ведения журнала Android и 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 Ответ

2 голосов
/ 24 февраля 2012

Не пытайтесь использовать переменную оболочку для потоков C ++, просто используйте соответствующий API C, такой как vprintf / vnsprintf.Обтекание потоков таким способом просто отбрасывает все преимущества и создает дополнительную сложность.

Почему бы не использовать API-упаковщик для использования потоков и сопоставить их с printf на платформах Android.Таким образом, вы получаете все преимущества потоков и теряете их только на платформах, которые их не поддерживают.

...