Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

27.09.2007, 23:35

Stream-Operatoren getrennt für binär und ascii

Ist es möglich, die Stream-Operatoren getrennt für binär und ascii Streams zu implementieren? Soweit ich weiß ist es nicht möglich, ios_base::openmode bei einem Stream abzufragen.
Bei einer Vektorklasse zum Beispiel würde ich bei einer Ascii-Ausgabe lieber noch ein Komma zwischen die Koordinaten setzen, bei Binärausgabe nicht.

Ich denke mal dass es nicht geht, aber vielleicht kennt jemand ja eine Möglichkeit :)
Mein Projekt: Rise of the Sylvan

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

28.09.2007, 09:14

Unterscheid halt zwischen AsciiStream und BinaryStream... Ne andere Möglichkeit wäre Manipulatoren zu verwenden.
@D13_Dreinig

3

28.09.2007, 22:14

Zitat von »"David_pb"«

Unterscheid halt zwischen AsciiStream und BinaryStream


wie? Es gibt nur einen Stream-Operator.
Mein Projekt: Rise of the Sylvan

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

28.09.2007, 22:26

Wo steht das? Bzw, was meinst du mit Stream Operator?
@D13_Dreinig

5

28.09.2007, 23:05

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
istream& operator >>(istream &is,Vector &v) {
    if (isAscii(is)) {
        is >> v.x >> ", " >> v.y;
    }
    else if (isBinary(is)) {
        is >> v.x >> v.y;
    }
    return is;
}

ostream& operator <<(ostream &os,const Base &obj) {
    if (isAscii(os)) {
        os >> v.x >> ", " >> v.y;
    }
    else if (isBinary(os)) {
        os >> v.x >> v.y;
    }
    return os;
}


so zum Beispiel.
Mein Projekt: Rise of the Sylvan

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

29.09.2007, 11:48

Ich meinte das eher so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
struct binary_istream : std::istream
{}

struct ascii_istream : std::istream
{}

binary_stream& operator<<( binary_stream& stream, const Vector& v )
{}

ascii_stream& operator<<( ascii_stream& stream, const Vector& v )
{}


Aber Manipulatoren wären wohl die gängigere Lösung.
@D13_Dreinig

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

7

29.09.2007, 14:45

Man muss sich allerdings immer fragen, wo die Manipulatoren ansetzen - std::iostream bietet ja afaik nicht wirklich die Möglichkeit, nutzerspezifische Einstellungen zu speichern, irgendwoher muss aber später der << operator abchecken, wie er ein Objekt behandeln soll.

8

29.09.2007, 15:57

@David_pb
Das wäre eine Möglichkeit. Am besten würde mir gefallen, wenn folgendes funktionieren würde:

C-/C++-Quelltext

1
2
3
4
5
std::ofstream file1(filename,std::ios_base::out | std::ios_base::binary);
file1 << v; //benutzt die binäre Version


std::ofstream file2(filename,std::ios_base::out);
file2 << v; //benutzt die ascii Version
Mein Projekt: Rise of the Sylvan

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

30.09.2007, 18:29

Zitat von »"grek40"«

Man muss sich allerdings immer fragen, wo die Manipulatoren ansetzen - std::iostream bietet ja afaik nicht wirklich die Möglichkeit, nutzerspezifische Einstellungen zu speichern, irgendwoher muss aber später der << operator abchecken, wie er ein Objekt behandeln soll.


Doch, diese Möglichkeit wird angeboten.

Crash: Das geht so eben nicht!
@D13_Dreinig

10

30.09.2007, 20:05

Zitat von »"David_pb"«

Crash: Das geht so eben nicht!

Danke :lol:
Mein Projekt: Rise of the Sylvan

Werbeanzeige