Obtenga un std :: ostream de std :: cout o std :: ofstream (archivo)
¿Cómo ato unstd::ostream
a cualquierastd::cout
o a unstd::ofstream
objeto, dependiendo de una determinada condición del programa? Aunque esto no es válido por muchas razones, me gustaría lograr algo que sea semánticamente equivalente a lo siguiente:
std::ostream out = condition ? &std::cout : std::ofstream(filename);
He visto algunos ejemplos que no son seguros para excepciones, como uno dehttp://www2.roguewave.com/support/docs/sourcepro/edition9/html/stdlibug/34-2.html:
int main(int argc, char *argv[])
{
std::ostream* fp; //1
if (argc > 1)
fp = new std::ofstream(argv[1]); //2
else
fp = &std::cout //3
*fp << "Hello world!" << std::endl; //4
if (fp!=&std::cout)
delete fp;
}
¿Alguien conoce una solución mejor y segura para las excepciones?