cin um cin.flush erweitern??
-
Hallo,
kann man Standartfunktionen wie cin erweitern, so dass ich mir ein eigenes cin.flush schreiben kann?
Und wo genau findet man den Code von cin? Den hab ich leider noch nicht gefunden...
Möchte mir nach Möglichkeit das als Funktion zum Eingabepuffer leeren selber schreiben!
Vielen Dank schon mal!
-
hmm, ableiten und überschreiben vielleicht?
-
Geht das überschreiben dann einfach indem ich ein lokales Objekt cin der Klasse istream erstelle?
Dann müsste ich praktisch nur ne abgeleitete Klasse myistream erstellen und um meine Funktion erweitern?class myistream : public istream { public: myistream(); ~myistream(); flush(); // meine neue Funktion cin.flush() } (...) int main() { myistream cin; (...) }Bei diesem Code beschwert sich der Compiler:
error: destructors must be member functionswas bedeutet das da?
-
Oh man machs doch nicht so umständlich. Schreib dir ein Modifier das sieht auch gleich viel schöner aus nacher:
std::cin >> myflush;Ansonsten geht deine Idee natürlich auch, musst eben deinem Stream den streambuf von cin übergeben.
-
uekue schrieb:
kann man Standartfunktionen wie cin erweitern, so dass ich mir ein eigenes cin.flush schreiben kann?
Was gefällt dir denn am Standard-flush() nicht, daß du unbedingt ein eigenes brauchst?
(btw, cin ist keine Funktion, sondern ein Objekt
(und wenn du dessen Methoden suchst, dann schau dir mal die Klasse istream an))
-
CStoll schrieb:
Was gefällt dir denn am Standard-flush() nicht, daß du unbedingt ein eigenes brauchst?
Bei mir (Debian Linux 3.1, GCC 3.3.5) gibt es cin.flush() nicht!
Wenn ich cin.flush() benutze, dann sagt er:
'flush()' undeclared (first use this function)Wenn ich cin.flush benutze, dann sagt er:
'struct std::istream' has no member named 'flush'Zur Klasse istream: Die such ich schon lange vergeblich! In meiner /usr/include/c++/3.3/istream wird nur die Klasse basic_istream definiert! Leider hab ich istream selbst noch nicht gefunden!
Würde mir evtl. schon viel helfen wenn jemand weiss wo ich diese Klasse finde!Die Idee mit dem Modifier gefällt mir aber auch ganz gut, das ist scheinbar auch nicht sehr schwer! Nur würde ich trotzdem das andere gerne können, nur so aus Interesse!
Danke schon mal für die Hilfe!
-
std::istream ist nur ein typedef auf std::basic_istream<char>
-
uekue schrieb:
CStoll schrieb:
Was gefällt dir denn am Standard-flush() nicht, daß du unbedingt ein eigenes brauchst?
Bei mir (Debian Linux 3.1, GCC 3.3.5) gibt es cin.flush() nicht!
Wenn ich cin.flush() benutze, dann sagt er:
'flush()' undeclared (first use this function)Wenn ich cin.flush benutze, dann sagt er:
'struct std::istream' has no member named 'flush'Dann solltest dir einen neuen Compiler suchen (istream::flush() ist im ANSI-Standard festgelegt - wenn dein Compiler das nicht kennt, ist er vermutlich hoffnungslos veraltet).
(oder du achtest darauf, den richtigen Header einzubinden - <iostream.h> ist prä-Standard, korrekt wäre <iostream>)
Zur Klasse istream: Die such ich schon lange vergeblich! In meiner /usr/include/c++/3.3/istream wird nur die Klasse basic_istream definiert! Leider hab ich istream selbst noch nicht gefunden!
Würde mir evtl. schon viel helfen wenn jemand weiss wo ich diese Klasse finde!Sorry, basic_istream<> ist schon die richtige Klasse - dort sollte eigentlich auch ein
typedef basic_istream<char> istream;danebenstehen.
-
CStoll schrieb:
uekue schrieb:
kann man Standartfunktionen wie cin erweitern, so dass ich mir ein eigenes cin.flush schreiben kann?
Was gefällt dir denn am Standard-flush() nicht, daß du unbedingt ein eigenes brauchst?
[...]
istream::flush() ist im ANSI-Standard festgelegtEntschuldige, aber von welchem Standard sprichst du? ISO/IEC 14882 zumindest definiert kein istream::flush. Dieser Standard definiert flush lediglich für *Ausgabe*-Ströme. Was auch logisch ist, da das Konzept flush (Syncronisation von Ausgabeströmen mit externen Zielen) auf Eingabeströmen keinen Sinn macht.
-
Verdammt, jetzt hast du mich total durcheinandergebracht, also nochmal von vorne:
flush() ist wirklich nur für Ausgabeströme definiert (das C-Äquivalent fflush() lässt sich zwar auch mit Eingabe-FILE's verwenden, aber das gehört in den Bereich "undefinied behaviour"). Das, was die meisten Leute sich unter
fflush(stdin);vorstellen, kannst du auf C++-Seite mitcin.ignore(numeric_limits<streamsize>::max(),'\n');erreichen.