C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Template und std::ostream ?!

 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German)
View previous topic :: View next topic  
Author Message
Marco
Guest





PostPosted: Sun Feb 20, 2005 3:25 pm    Post subject: Template und std::ostream ?! Reply with quote



Hallo group,
ich habe eine Matrix Template Klasse. Den Datentyp kann ich über den
template Parameter festlegen. Ich möchte die Matrix nun per operator<<
in einen Stream schreiben.
Im Pseudocode stell ich mir die operator<< Methode so vor:

std::ostream Matrix::operator<<(...std::ostream& ostream...)
{
//Loop über alle Zeilen und Spalten...
ostream<
return ostream;
}

Mein erstes Problem:
Wenn ich als Template Datentyp zb. "float" verwende, bekomm ich
Probleme wenn ich versuche die Daten per operator>> wieder vom Stream
zu lesen, da ich nicht weiss wie der ursprüngliche Float Wert aussah.
(1.234.5 kann 1.23 , 4.5 oder
1.2 , 34.5 heissen)

Deswegen ging ich dazu über die Daten mit folgendem Syntax in den
Stream zu schreiben:

ostream.write(reinterpret_cast<const char*>(&value),
sizeof(DataType));

Für Standard Datentypen sehe ich soweit keine Probleme.

Da ich aber extra ein Template Klasse habe kann man ja auf die Idee
kommen mit selbstdefinierten Datentypen zu arbeiten (zb. Komplexe
Zahlen etc)

In diesem Fall gefällt mir das "sizeof(DataType)" aber ganz und
garnicht mehr.
In diesem Fall würde ich lieber in meiner Complex Klasse ebenfalls den
operator<< einführen und meine erste Version verwenden...

Deshalb meine Frage:
Wie kann ich den Code von operator<< (>>) so allgemein wie möglich
halten, so dass "alle" Datentypen verwendet werden können ?

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
Back to top
Falk Tannhäuser
Guest





PostPosted: Sun Feb 20, 2005 7:27 pm    Post subject: Re: Template und std::ostream ?! Reply with quote



Marco wrote:

Quote:
std::ostream Matrix::operator<<(...std::ostream& ostream...)
{
//Loop über alle Zeilen und Spalten...
ostream<
return ostream;
}

Mein erstes Problem:
Wenn ich als Template Datentyp zb. "float" verwende, bekomm ich
Probleme wenn ich versuche die Daten per operator>> wieder vom Stream
zu lesen, da ich nicht weiss wie der ursprüngliche Float Wert aussah.
(1.234.5 kann 1.23 , 4.5 oder
1.2 , 34.5 heissen)

Warum nicht einfach:
std::ostream& operator<<(std::ostream& os, Matrix const& mat)
{
//Loop über alle Zeilen und Spalten...
os << ' ' << mat.m_element[x][y];
return os;
}
Eventuell musst du noch die Zeilen/Spaltenzahl mit speichern - es sei
denn, deine Matrizen sind alle gleich groß. Vielleicht braucht's
auch ein anderes Trennzeichen zwischen den Zeilen als zwischen
den Elementen innerhalb einer Zeile, z.B. 'n'. Auf alle Fälle lassen
sich die Zahlen besser wieder einlesen, wenn sie irgendwie (z.B. per
Leerzeichen) abgetrennt sind :-)

Quote:

Deswegen ging ich dazu über die Daten mit folgendem Syntax in den
Stream zu schreiben:

ostream.write(reinterpret_cast sizeof(DataType));

Für Standard Datentypen sehe ich soweit keine Probleme.

Mag gehen, solange wie man die Datei nur auf dem gleichen Maschinen-
typ mit vom selben Compiler sowie gleichen Optionen übersetzten
Programmen und nach Möglichkeit bei der gleichen Mondphase wieder
einliest - portabel ist das nicht! Stichworte: Größe der Standard-
datenttypen, Little/Middle/Big-endian, Darstellung negativer
Ganzzahlen (Zweier- oder Einerkomplement oder SM), unterschiedliche
Gleitkommaformate, Padding...
Ob das für dich ein Problem darstellt, kann man aus der Ferne so
schwer sagen.

Quote:

Da ich aber extra ein Template Klasse habe kann man ja auf die Idee
kommen mit selbstdefinierten Datentypen zu arbeiten (zb. Komplexe
Zahlen etc)

In diesem Fall gefällt mir das "sizeof(DataType)" aber ganz und
garnicht mehr.
In diesem Fall würde ich lieber in meiner Complex Klasse ebenfalls den
operator<< einführen und meine erste Version verwenden...

Deshalb meine Frage:
Wie kann ich den Code von operator<< (>>) so allgemein wie möglich
halten, so dass "alle" Datentypen verwendet werden können ?

Obiger Operator könnte auch als Template mit dem Elementtypen als
Parameter geschrieben werden.

MfG
Falk

--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de

Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.