Funzione di stampa in C++

xyz34567
Buongiorno,
è possibile creare una funzione in C++ che possa stampare dati sia sullo stream di output che su un altro stream?
Per esempio:
se voglio stampare a video un array di struct e allo stesso tempo caricalo (con le stesse diciture) su un file posso creare una funzione che mi permetta di farlo semplicemente richiamandola due volte e specificando lo stream senza dover riscrivere tutto il codice?
Grazie mille e buona giornata!

Risposte
reda99
Perché pensi di non poterlo fare?
Salvo errori è dai tempi di K&R che si usa fprintf...

xyz34567
Ciao reda99, grazie per l'aiuto!
In realtà il punto è che non so come farlo (sto studiando per un esame di informatica di base all'università ma non l'ho mai fatta prima e quindi non ne so molto...).
Ma fprintf non è una funzione del linguaggio C (ho provato a cercare un attimo su internet...)?
Mi sa di essermi spiegato male: ho capito come scrivere sui file in C++ ma mi stavo chiedendo se è possibile specificare (tra i parametri che passi a una funzione) uno stream sul quale si vuole agire.
Ad esempio se voglio stampare "ciao" sia a video che su un file dovrei scrivere:
cout<<"ciao";
f<<"ciao"; (a patto che f sia un ofstream per un determinato file...)
È possibile creare una funzione del tipo:
void stampa(???){}
nella quale possa specificare cout e f per stampare tutto in una volta chiamando:
stampa(cout);
stampa(f);
In questo modo se al posto di "ciao" dovessi stampare qualcosa di molto più lungo e complesso (e magari su più di 2 stream) potrei evitare di copiare n volte il codice che mi permette la stampa sostituendo tutte le volte lo stream tra i parametri che passo alla funzione stampa(???){} e limitandomi a chiamarla n volte.
Grazie ancora!

apatriarca
Puoi fare qualcosa come il seguente:
#include <fstream>
#include <iostream>

void stampaSuStream(std::ostream& output)
{
	output << "Hello World!\n";
}

int main()
{
	stampaSuStream(std::cout);

	std::fstream f("hello.txt", std::ios::out);
	stampaSuStream(f);
	f.close();

	return 0;
}

xyz34567
Quindi in pratica passo lo stream per riferimento alla funzione?

xyz34567
Grazie a entrambi!
Solo per essere sicuro:
la specifica std:: può essere evitata scrivendo dopo gli #include
using namespace std;
e ios::out si può sostituire definendo direttamente
ofstream f("hello.txt").


Domanda tecnica per le prossime volte: mi potresti per favore dire come fai a scrivere il codice perché non capisco e (per rispetto verso gli utenti) mi sembra giusto impararlo.

Grazie!

apatriarca
Esatto. Per inserire il codice tra i tag [tt][code][/tt] e [tt][/ code][/tt] (in quest'ultimo devi togliere lo spazio che ho aggiunto per poterlo visualizzare nel mio post). C'è in alternativa il pulsante [tt]Code[/tt] nell'editor avanzato.

xyz34567
Grazie!
Ho provato a farlo e l'anteprima di pubblicazione lo interpreta correttamente.
Buona giornata!

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.