Namensräume
Varianten
Aktionen

std::ios_base::pword

Von cppreference.com
< cpp‎ | io‎ | ios base
 
 
 
 
void*& pword( int index );

Allokiert oder vergrößert den privaten Speicher (dynamisches Array von void* oder einer anderen indizierbaren Datenstruktur), so dass index ein gültiger Index ist, und gibt dann eine Referenz auf das void*-Element des privaten Speichers mit dem Index index zurück.

Die Referenz kann durch jede Operation an diesem ios_base-Objekt ungültig werden, einschließlich eines weiteren Aufrufs von pword(). Die gespeicherten Werte bleiben jedoch erhalten, sodass das Lesen von pword(index) mit demselben Index später denselben Wert ergibt, bis zum nächsten Aufruf von std::basic_ios::copyfmt(). Der Wert kann für jeden Zweck verwendet werden. Der Index des Elements muss durch xalloc() erhalten werden, andernfalls ist das Verhalten undefiniert. Neue Elemente werden mit einem Nullzeiger initialisiert.

Wenn die Funktion fehlschlägt (möglicherweise aufgrund eines Speicherzuordnungsfehlers) und *this ein Basisklassen-Unterobjekt eines basic_ios<>-Objekts oder -Unterobjekts ist, wird std::basic_ios<>::setstate(badbit) aufgerufen, was std::ios_base::failure auslösen kann.

Inhalt

[bearbeiten] Parameter

index - index Wert des Elements

[bearbeiten] Rückgabewert

Ein Verweis auf das Element.

[bearbeiten] Ausnahmen

Kann std::ios_base::failure auslösen, wenn das badbit gesetzt wird.

[bearbeiten] Hinweise

Wenn die in pword gespeicherten Zeiger eine Verwaltung erfordern, kann register_callback() verwendet werden, um Handler zu installieren, die eine tiefe Kopie oder Dekallocation nach Bedarf ausführen.

[bearbeiten] Beispiel

Verwendet den pword-Speicher der Basisklasse zur Laufzeit-Typidentifikation von abgeleiteten Stream-Objekten.

#include <iostream>
 
template<class CharT, class Traits = std::char_traits<CharT>>
class mystream : public std::basic_ostream<CharT, Traits>
{
public:
    static const int xindex;
 
    mystream(std::basic_ostream<CharT, Traits>& ostr) :
        std::basic_ostream<CharT, Traits>(ostr.rdbuf())
    {
        this->pword(xindex) = this;
    }
 
    void myfn()
    {
        *this << "[special handling for mystream]";
    }
};
 
// Each specialization of mystream obtains a unique index from xalloc()
template<class CharT, class Traits>
const int mystream<CharT, Traits>::xindex = std::ios_base::xalloc();
 
// This I/O manipulator will be able to recognize ostreams that are mystreams
// by looking up the pointer stored in pword
template<class CharT, class Traits>
std::basic_ostream<CharT, Traits>& mymanip(std::basic_ostream<CharT, Traits>& os)
{
    if (os.pword(mystream<CharT, Traits>::xindex) == &os)
        static_cast<mystream<CharT, Traits>&>(os).myfn();
    return os;
}
 
int main()
{
    std::cout << "cout, narrow-character test " << mymanip << '\n';
 
    mystream<char> myout(std::cout);
    myout << "myout, narrow-character test " << mymanip << '\n';
 
    std::wcout << "wcout, wide-character test " << mymanip << '\n';
 
    mystream<wchar_t> mywout(std::wcout);
    mywout << "mywout, wide-character test " << mymanip << '\n';
}

Ausgabe

cout, narrow-character test
myout, narrow-character test [special handling for mystream]
wcout, wide-character test
mywout, wide-character test [special handling for mystream]

[bearbeiten] Defect Reports

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 36 C++98 der gespeicherte Wert wird möglicherweise nicht
beibehalten, wenn die Referenz ungültig wird
der gespeicherte Wert wird beibehalten
bis zum nächsten Aufruf von copyfmt()
LWG 41 C++98 die Funktion setzt badbit bei Fehler selbst,
aber ios_base stellt keine solche Schnittstelle bereit
badbit wird von basic_ios gesetzt
(wenn *this sein Basisklassen-Unterobjekt ist)

[bearbeiten] Siehe auch

vergrößert den privaten Speicher bei Bedarf und greift auf das long-Element am gegebenen Index zu
(öffentliche Memberfunktion) [edit]
[static]
gibt eine programmintern eindeutige Ganzzahl zurück, die sicher als Index für pword() und iword() verwendet werden kann
(öffentliche statische Memberfunktion) [edit]