2012-04-27 20 views
17

Estoy tratando de encontrar una forma de pasar Fout o Cout a una función. Me doy cuenta de que hay maneras lógicamente fáciles de manejar esto, como poner ifs en cualquier función que muestre datos o incluso solo escriba la función en ambos sentidos. Sin embargo, eso parece primitivo e ineficiente. No creo que este código funcione alguna vez, lo estoy poniendo aquí para garantizar que sea fácil ver lo que me gustaría "hacer". Tenga en cuenta que estoy tomando una clase de diseño de algoritmo con C++, de ninguna manera soy un programador experimentado de C++. Mi clase está limitada a usar los encabezados que ves.¿Es posible pasar cout o fout a una función?

#include <iostream> 
#include <iomanip> 
#include <fstream> 

using namespace std; 
void helloWorld(char); 
ofstream fout; 

int main() 
{ 
    fout.open("coutfout.dat"); 
    helloWorld(c); 
    helloWorld(f); 

    return 0; 
} 
void helloWorld(char x) 
{ 
    xout << "Hello World"; 
    return; 
} 

Respuesta

33

Estos dos heredar de ostream a fin de tratar esto:

void sayHello(ostream& stream) 
{ 
    stream << "Hello World"; 
    return; 
} 

Luego en main, pase el objeto (cout o lo que sea) y debería funcionar bien.

+0

¡Funciona! Sabía que no podía ser tan difícil como lo estaba haciendo. ¡Gracias un montón! – ChiefTwoPencils

+3

No hay problema. Consulte http://en.cppreference.com/w/cpp/io/basic_ostream para la clase base. –

+0

@Kevin Después de leer el enlace que dio, creo que la función debería devolver 'stream' como argumento ...' std :: ostream & sayHello (std :: ostream & stream) {return stream << "Hello World";} ' – GingerPlusPlus

12

Sí. Deje que su función sea

sayhello(std::ostream &os); 

Luego, en la función, se puede utilizar en lugar del osxout.

(. Por cierto, using namespace std vertederos de todo el espacio de nombres std y no se recomienda un using std::cout y similares es muy bien, sin embargo.)

+0

Gracias. Me di cuenta de que el formato parecía ser la convención. Entonces, ¿'using std :: cout' crea un" atajo "que hace posible usar' cout', pero dejando intacto el resto del espacio de nombres estándar? – ChiefTwoPencils

+0

@RobertoWilko: Eso es correcto. El 'using std :: cout' introduce el nombre' cout' en el espacio de nombres actual para su uso inmediato (lo que significa que no puedes acceder a una variable local llamada 'cout', si es que hay una). – thb

Cuestiones relacionadas