Attualmente sto scrivendo un wrapper per un std::stringstream
e voglio inoltrare tutte le chiamate operator<<
attraverso la mia classe allo std::stringstream
. Questo funziona bene ora (grazie a questa domanda: wrapper class for STL stream: forward operator<< calls), ma c'è ancora un problema con esso.Classe wrapper C++ per iostream, utilizzare modificatori di flusso come std :: endl con operatore <<
Diciamo che ho il seguente codice:
class StreamWrapper {
private:
std::stringstream buffer;
public:
template<typename T>
void write(T &t);
template<typename T>
friend StreamWrapper& operator<<(StreamWrapper& o, T const& t);
// other stuff ...
};
template<typename T>
StreamWrapper& operator<<(StreamWrapper& o, T const& t) {
o.write(t);
return o;
}
template<typename T>
void StreamWrapper::write(T& t) {
// other stuff ...
buffer << t;
// other stuff ...
}
Se ora faccio questo:
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff";
Questo funziona bene. Ma se voglio usare i modificatori di flusso come std::endl
, che è una funzione in base a http://www.cplusplus.com/reference/ios/endl, semplicemente non compilo.
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff" << std::endl;
Perché? Come posso inoltrare anche i modificatori di flusso?
Qual è l'errore di compilazione? –
Esistono sovraccarichi di 'operatore <<' che accetta una funzione, quindi chiama tale funzione nello stream: http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt http: //en.cppreference .com/w/cpp/io/manip – BoBTFish