Что, если вы попробовали что-то простое, как это?
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()
.