Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » ios_base vererbung

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.09.2008, 18:12 Uhr
xXx
Devil



Wie ist das jetzt realisiert, dass iostream von beiden erbt und dabei beide den selben streambuffer nutzen?


C++:
struct ios_base
{
    typedef std::size_t        position_t;

    explicit ios_base()
        : m_cursor(0)
    {}

protected:
    char*                    m_data;
    position_t                m_cursor;
    std::size_t                m_size;
};

struct ostream : public ios_base
{
    template <typename value_type>
    friend ostream& operator>>(ostream& out, value_type& rhs)
    {
        // bound check
        // const std::size_t size(sizeof(value_type));
        // if (out.m_size <= (out.m_cursor + size)) out.setflag(failure);

        // read data
        rhs = *reinterpret_cast<value_type*>(out.m_data[out.m_cursor]);

        // move cursor
        out.m_cursor += size;
            
        return out;
    }
};

struct  istream : public ios_base
{
    template <typename value_type>
    friend istream& operator<<(istream& in, value_type const& rhs)
    {
        // bound check
        // const std::size_t size(sizeof(value_type));
        // if (in.m_size <= (in.m_cursor + size)) resize(in.m_cursor + size);
    
        // write data
        *reinterpret_cast<value_type*>(in.m_data[in.m_cursor]) = rhs;
            
        // move cursor
        in.m_cursor += size;

        return in;
    }
};

struct iostream : public istream, public ostream
{
    /* ??? */
};

So jetzt ist halt die Frage wie es anstelle von "???" geregelt ist. Wird eine interne Funktion zum initialisieren genutzt wo dann der buffer für alle gesetzt wird oder wie?
Vielen Danke schonmal!

Dieser Post wurde am 17.09.2008 um 18:15 Uhr von xXx editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
17.09.2008, 19:41 Uhr
~ew09
Gast


Also ich bin jetz vom Programmieren her sicherlich noch nicht so weit wie du, dass ich dir die Frage direkt beantworten könnte,
aber vielleicht könntest du doch einfach mal die iostream Header Datei öffnen und so direkt darin nachschaun, wie's gemacht wurde?

War gerade nur mal so n Gedanke von mir. =P
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
17.09.2008, 23:09 Uhr
Kest
saint


Von >ios< wird virtual abgeleitet. >ios< bestimmt den Stream-Puffer. Und operator>> oder operator<< benutzen Put- und Get-Operationen davon. istream und ostream benutzen beide >basic_streambuf<: den gleichen Stream-Puffer.

"ios_base" <-- "ios"
"ios" <-- virtual "istream"
"ios" <-- virtual "ostream"
"istream","ostream" <-- "iostream"
--
Wenn man einen Hufschlag hört, sollte man >Pferd< denken und nicht >Zebra<.

Dieser Post wurde am 17.09.2008 um 23:14 Uhr von Kest editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: