Как кто-то еще сказал, есть несколько хороших каркасов регистрации.Однако, если вы хотите сделать свой собственный бросок, первое, что нужно отметить, это то, что cout - это не функция, а поток.Функция operator<<
.Что вы можете сделать, это примерно так:
/* trace.h */
extern ostream debug;
void trace_init();
void trace_done();
/* trace.cpp */
#include "trace.h"
ostream debug(cout.rdbuf());
static ofstream null;
void trace_init()
{
null.open("/dev/null");
if(output_is_disabled) { // put whatever your condition is here
debug.rdbuf(null.rdbuf());
}
}
void trace_done()
{
null.close();
}
Возможно, вам придется немного подстроиться, если вы на платформе без /dev/null
.Это позволяет вам писать
debug << "here's some output << endl;
, и если у вас включен вывод, он будет записывать в cout.Если нет, он напишет в /dev/null
, где вы ничего не увидите.
В этом отношении вы можете просто установить rdbuf в cout где-нибудь, где вы не увидите этот вывод, но я бы обнаружил, чтобыть действительно плохой идеей.Создание новых потоков дает вам гораздо больше гибкости в управлении выходными данными.