Unerwartetes Stream-Verhalten bei Typ (unsigned char)?!
-
Und eine andere Möglichkeit, ausser einer Template-Spezialisierung und einem cast nach int gibt es nicht?
-
Welches Problem hast Du denn mit der Template-Spezialisierung? Das wäre im Prinzip die einfachste Möglichkeit. Ein Flag für die IOstreams, die das trotzdem als Zahl und nicht als Zeichen lesen, gibt es afaik nicht.
-
Wenn ich eine Template-Spezialisierung benutze, bekomme ich beim Linken eine "multiple definition" Fehlermeldung. Angeblich sei die Methode für <unsigned char> in zwei .o Dateien definiert, welche kollidieren.
Compiler ist GCC 3.3.6.
-
7H3 N4C3R schrieb:
Ein Char ist per se ein Zeichen, keine Zahl.
Wenn du dir mal ne char_traits Klasse ansiehst wirst du feststellen dass ein char beides ist/sein kann.
Ansonsten würde ich mal mein Glück mit nem istream_iterator probieren.
MfG Spacelord
-
wenn du nur zahlentypen einlesen willst, dann kannst du es ja so machen:
while( file.good() ) { string row; T val; // T ist ein Template-Parameter getline( file, row ); istringstream stream( row ); while( stream.good() ) { double num; stream >> num; val=static_cast<T>(num); // irgendwas mit val anstellen... } }
-
Spacelord schrieb:
Wenn du dir mal ne char_traits Klasse ansiehst wirst du feststellen dass ein char beides ist/sein kann.
Wie Du im Standard unter 27.6.1.2.2 sehen kannst, gibt es aber keinen Arithmetic Extractor für char.
Man könnte mal versuchen, das num_get<> Template selbst zu benutzen... probier ich mal aus. Falls es klappt, poste ich den Code.
Edit:
Hm zumindest im ersten Versuch mit nem halbwegs aktuellen GCC gibt's keine Version von num_get für char.Edit2:
Und der Standard sieht auch keine Methode in num_get vor, um chars als Zahlen zu lesen. Also wäre Spezialiserung immernoch die beste Möglichkeit.@caffeine:
Naja die Verwendung einer Template-Spezialisierung sollte aber nicht zu multiple definitions führen. Zeig mal den Code, der das macht.
-
Könnte man hier nicht vielleicht von num_get ableiten und es um char, unsigend char, signed char entsprechend erweitern? Oder ein eigenes facet schreiben?
Hume?

-
facet geht immer. Ist aber von kosten-nutzen Faktor relativ weit unten anzusiedeln.
//edit was schreib ich da: das geht nicht! der op>> sucht sich nämlich gleich das "passende" facet aus, und das wird bei char nie num_get sein.
-
Natürlich dann nicht mehr op>> benutzen, sondern direkt das facet.
-
7H3 N4C3R schrieb:
Natürlich dann nicht mehr op>> benutzen, sondern direkt das facet.
dann ist der kosten-nutzen faktor nahe null

kann ich gleich nach int casten und dann wieder nach char zurück
