Как написать функцию регистрации аргумента переменной, которая делает актуальную регистрацию в C ++ - PullRequest
1 голос
/ 11 апреля 2020

Я пишу класс logger на c ++. Я хочу перенаправить все журналы из разных файлов в функцию, которая решает, куда записывать журнал.

, например,

func A()
{
int a =10;
std::string b = "test";
cout<<"printing"<<a<<b<<endl;
}

func B()
{
unsigned long t = 6700;
cout<<t<<endl;
}

Вместо cout я хочу иметь функцию, которая принимает переменные аргументы и отправляется в общую функцию, которая, наконец, печатает или записывает в файл или используемый системный журнал.

1 Ответ

1 голос
/ 11 апреля 2020

Что, если вы попробовали что-то простое, как это?

std::unique_ptr<std::ostream> g_ostream_ptr;


std::ostream& log() {
    return *g_ostream_ptr;
}

void initialize_log() { 
    // initialize `g_ostream_ptr` based on environment variable
    // or other configuration information.
    const char* filename = std::getenv("LOG_FILE");
    if (!filename)
        filename = "/dev/stdout"

    g_ostream_ptr = std::make_unique<std::ostream>(filename);
}

Тогда вы могли бы использовать это так:

void f() {
    log() << “f called.” << std::endl;
}

Вы должны убедиться, что initialize_log вызывается в какой-то момент, возможно, используя std::call_once, или просто позвонив в main().

...