Jak połączyć strumienie cout i ofstream fileOut aby dane trafiały jednocześnie (sekwencyjnie) do obu strumieni. Czy da się to zrobić inaczej niż przez tworzenie buforu?</i>
No to jednocześnie czy sekwencyjnie w końcu :D ??
string s;
//...
cout << s;
fileOut << s;
[diabel]
Ech... zapisywać jednocześnie pod dwa adresy pamięci, tudzież wywoływać jednocześnie dwa przerwania jest to nie lada sztuka... magiczna :D Ktoś zna poważną odpowiedź? ;)
Jeszcze raz. Czy da sie zapisac to lepiej:
cout << " balblabla " << /*int / i << " bla dalej bla " << / float */ f << endl;
outFile << " balblabla " << /*int / i << " bla dalej bla " << / float */ f << endl;
moze cos takiego:
#include <iostream>
#include <fstream>
using namespace std;
class Pisanko
{
private:
ostream &str1, &str2;
public:
Pisanko(ostream & str1, ostream &str2) : str1(str1), str2(str2) {}
template <class Typ>Pisanko & operator<<(const Typ & t)
{
str1 << t;
str2 << t;
return *this;
}
~Pisanko()
{
str1.flush();
str2.flush();
}
};
int main()
{
ofstream plik("C:\\test.txt");
Pisanko p(cout, plik);
p << "ala " << 1 << " ola " << 2 << '\n';//bo siakas niejednoznacznosc przy endl
p << "Koniec\n";
cin.get();
return 0;
}
Tak...
szopen: Ale po co tak robić?!
A błąd dla endl (i innych manipulatorów) jest dlatego, że operator<< nie zwraca strumienia, tylko Pisanko :P No to teraz zastanowienie... Nie, nie da się strumienia zwracać, no bo który?! Trzeba manipulatory zdefiniować...
Jak zwykle odpowiedzią jest to czego oczekujemy (jaki chcemy osiągnąć efekt)
:d
#include <sstream>
//...
ostringstream oss;
oss << " balblabla " << /*int */ i << " bla dalej bla " << /* float */ f << endl;
cout << oss.str();
plik << oss.str();
operator<< nie zwraca strumienia, tylko Pisanko :P
Hmm, z tego co wiem operator<< zwraca wlasie strumien na rzecz ktorego byl wywolany, wiec nie trzeba zadnego manipulatora pisac, i rozwiazanie jest spoko wg mnie.</quote>
operator<< nie zwraca strumienia, tylko Pisanko :P
Hmm, z tego co wiem operator<< zwraca wlasie strumien na rzecz ktorego byl wywolany, wiec nie trzeba zadnego manipulatora pisac, i rozwiazanie jest spoko wg mnie.
</quote>
Taaa... 0.03 PLN??
template <class Typ>Pisanko & operator<<(const Typ & t)