Программно игнорировать Cout - PullRequest
10 голосов
/ 11 октября 2011

Кто-нибудь знает, есть ли хитрость для переключения всех функций cout <<, чтобы не распечатывать видимый вывод? Я пытаюсь собрать воедино какой-то код, написанный мной и другими людьми, для создания демонстрации. Я бы предпочел не перенаправлять вывод в файл и хотел бы решение, имеющее некоторую степень совместимости между Windows и Linux.

В моем сценарии у меня есть много строк кода с различными #defines, контролирующими, когда определенные методы выдают отладочный вывод. Я хочу назвать что-то вроде:

cout.off();
driverForAffectA();
driverForAffectB();
cout.on();
printSpecializedDebug();
exit(0);

Ответы [ 2 ]

16 голосов
/ 11 октября 2011

Вы можете изменить буфер потока cout.

streambuf *old = cout.rdbuf();
cout.rdbuf(0);
cout << "Hidden text!\n";
cout.rdbuf(old);
cout << "Visible text!\n";

Редактировать:

Благодаря комментарию Джона Флэтнеса вы можете немного сократить код:

streambuf *old = cout.rdbuf(0);
cout << "Hidden text!\n";
cout.rdbuf(old);
cout << "Visible text!\n";
1 голос
/ 11 октября 2011

Почему именно вы не хотите перенаправить вывод?Если это потому, что вы хотите сохранить другой вывод, вам может не повезти.

Если это просто так, вам не нужно вводить сложное выражение оболочки вТерминал в демо, я предлагаю сделать стартовый скрипт и сделать перенаправление внутри.

То, или снова открыть стандартный вывод на /dev/null где-нибудь в верхней части главного.

...