Namespaces
Variants

std::ios_base:: pword

From cppreference.net
void * & pword ( int index ) ;

Zunächst wird der private Speicher (dynamisches Array von void * oder einer anderen indizierbaren Datenstruktur) so allokiert oder in der Größe angepasst, dass index ein gültiger Index wird, und dann wird eine Referenz auf das void * -Element des privaten Speichers mit dem Index index zurückgegeben.

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

Wenn die Funktion fehlschlägt (möglicherweise verursacht durch einen Allokationsfehler) und * this ein Basisklassen-Subobjekt eines basic_ios<> -Objekts oder -Subobjekts ist, ruft sie std:: basic_ios <> :: setstate ( badbit ) auf, was std::ios_base::failure auslösen kann.

Inhaltsverzeichnis

Parameter

Index - Indexwert des Elements

Rückgabewert

Eine Referenz auf das Element.

Exceptions

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

Hinweise

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

Beispiel

Verwendet die pword-Speicherung der Basisklasse zur Laufzeit-Typidentifikation abgeleiteter Stream-Objekte.

#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]

Fehlerberichte

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

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 36 C++98 der gespeicherte Wert könnte nicht
beibehalten werden, 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 selbstständig bei Fehlern,
aber ios_base bietet keine solche Schnittstelle
badbit wird durch basic_ios gesetzt
(falls * this sein Basisklassen-Subobjekt ist)

Siehe auch

vergrößert den privaten Speicher falls nötig und ermöglicht Zugriff auf das long Element am gegebenen Index
(öffentliche Elementfunktion)
[static]
gibt einen programmweit eindeutigen Integer-Wert zurück, der sicher als Index für pword() und iword() verwendet werden kann
(öffentliche statische Elementfunktion)