Beh non esattamente, usando quei due modi l'output viene mandato immediatamente, invece con io metodo append() del java, l'output non viene inviato finché non viene chiamato il metodo flush()
(Chiedo scusa ma non so usare termini tecnici:asd:, spero di essermi spiegato)
In realtà nemmeno
.operator<<()
scrive sul buffer dello stream immediatamente ma quando viene chiamato
std::flush
(quando il buffer dell’oggetto
std::ofstream
è pieno, magari con
std::endl
ma anche
"\n"
può chiamarlo, dipende dalla implementazione...).
Se vuoi una cosa simile in C++ ti basta una classe con un buffer interno, un metodo
append(...)
e un metodo
flush()
che scrive su un file (che gestisce internamente il file o un reference a quello) solo quando chiami
flush
.
Sono quasi certo che la libreria standard non metta nulla a disposizione di simile, forse Boost ma non so. Puoi comunque fartelo manualmente appunto
———
Tipo
C++:
template <class CharType>
class MyStreamWriter final {
public:
MyStreamWriter(std::basic_ofstream<CharType>& s)
: stream (s)
{ }
void append(const std::basic_string<CharType>& string) {
buffer.push_back(string);
}
void flush() {
for (auto& s : buffer)
stream << s;
stream << std::flush;
buffer.resize(0);
}
private:
std::basic_ofstream<CharType>& stream;
std::vector<std::basic_string<CharType>> buffer;
};