Ich Problem in der Zusammenstellung der folgenden Code-Schnipsel, während GNU mit g ++ 4.9.2 (verwendet in g zu kompilieren ok ++ 2.95.3)Overloading Endl Kompilation Ausgabe in GNU g ++ 4.9.2
XOStream &operator<<(ostream &(*f)(ostream &)) {
if(f == std::endl) {
*this << "\n" << flush;
}
else {
ostr << f;
}
return(*this);
}
Der Fehler ist wie folgt:
error: assuming cast to type 'std::basic_ostream<char>& (*)(std::basic_ostream<char>&)' from overloaded function [-fpermissive]
[exec] if(f == std::endl) {
[exec] ^
Bitte führen/helfen.
Hinweis: Um läuft in diese Art von Problemen zu vermeiden können Sie einen XOStreamBuffer schreiben und hänge es an den XOStream an (ein fast unveränderter ostream) –
Also, warum lässt du 'endl' nicht einfach sein Ding machen? Weil Sie 'flush' auf der' XOStream' Ebene statt auf der 'ostr' Ebene abfangen wollen? Sie könnten auch das 'else' vereinfachen, um' f (ostr); 'direkt zurückzugeben ... Ich denke, wenn es auch einen ähnlichen Hack macht, wird das nicht funktionieren. – Yakk