Программно игнорировать Cout

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

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

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

Ответ 1

Вы можете изменить буфер потока 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";

Ответ 2

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

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

Это или снова открыть stdout до /dev/null где-то рядом с верхней частью main.