Ich schreibe gerade einen Wrapper für eine std::stringstream
und ich möchte alle operator<<
Anrufe über meine Klasse an die std::stringstream
weiterleiten. Dies funktioniert jetzt gut (Danke an diese Frage: wrapper class for STL stream: forward operator<< calls), aber es gibt immer noch ein Problem damit.C++ Wrapper-Klasse für Iostream, verwenden Sie Stream-Modifizierer wie std :: endl mit Operator <<
Sagen wir, ich habe den folgenden Code:
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 ...
}
Wenn ich das jetzt tun:
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff";
Dies funktioniert gut. Aber wenn ich die Stream-Modifikatoren wie std::endl
verwenden möchte, die eine Funktion gemäß http://www.cplusplus.com/reference/ios/endl ist, kompiliere ich einfach nicht.
StreamWrapper wrapper;
wrapper << "text" << 15 << "stuff" << std::endl;
Warum? Wie kann ich die Stream-Modifikatoren auch weiterleiten?
Was ist der Compiler-Fehler? –
Es gibt Überladungen von 'operator <<', die eine Funktion annehmen, und rufen Sie dann diese Funktion im Stream auf: http://en.cppreference.com/w/cpp/io/basic_ostream/operator_ltlt http: //en.cppreference .com/w/cpp/io/manip – BoBTFish