2011-10-11 21 views
10

¿Alguien sabe si hay un truco para alternar todas las funciones cout << para no imprimir la salida visible? Estoy tratando de hackear juntos un código escrito por mí y por otras personas para armar una demostración. Preferiría no redirigir el resultado a un archivo y me gustaría una solución que tuviera cierta medida de compatibilidad entre Windows y Linux.Programmatically Ignore Cout

En mi escenario tengo muchas líneas de código con varios #defines controlando cuando ciertos métodos producen resultados de depuración. Deseo llamar a algo como:

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

¡Bien, siempre puedes redirigir tu salida a un archivo o dev/null! – AraK

Respuesta

16

Puede cambiar el buffer de flujo de cout.

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

Editar:

Gracias al comentario de John planitud puede acortar un poco su código:

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

Mejor aún, 'rdbuf (streambuf *)' devuelve el búfer antiguo, por lo que ni siquiera necesita llamadas separadas para obtener el antiguo y establecer uno nuevo. –

+0

@John Flatness: Oh gracias, no me di cuenta de eso en los documentos. Solucionado mi respuesta. – GWW

1

Por qué precisamente qué no quieres redirigir la salida? Si es porque hay otra salida que desea conservar, puede que no tenga suerte.

Si es así para no tener que escribir una expresión de shell compleja en un terminal en una demostración, sugiero hacer un script de inicio y hacer el redireccionamiento dentro.

Eso, o vuelva a abrir stdout a /dev/null en algún lugar cerca de la parte superior de la principal.