Namespaces
Variants

std::ios_base:: pword

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

D'abord, alloue ou redimensionne le stockage privé (tableau dynamique de void * ou une autre structure de données indexable) suffisamment pour rendre index un index valide, puis retourne une référence à l'élément void * du stockage privé avec l'index index .

La référence peut être invalidée par toute opération sur cet ios_base objet, y compris un autre appel à pword() , mais les valeurs stockées sont conservées, de sorte que la lecture de pword ( index ) avec le même index ultérieurement produira la même valeur jusqu'au prochain appel à std::basic_ios::copyfmt() . La valeur peut être utilisée à n'importe quelle fin. L'index de l'élément doit être obtenu par xalloc() , sinon le comportement est indéfini. Les nouveaux éléments sont initialisés à un pointeur nul .

Si la fonction échoue (éventuellement à cause d'un échec d'allocation) et que * this est un sous-objet de classe de base d'un objet basic_ios<> ou sous-objet, appelle std:: basic_ios <> :: setstate ( badbit ) qui peut lever std::ios_base::failure .

Table des matières

Paramètres

index - valeur d'index de l'élément

Valeur de retour

Une référence à l'élément.

Exceptions

Peut lever std::ios_base::failure lors de la définition du badbit.

Notes

Si les pointeurs stockés dans pword nécessitent une gestion, register_callback() peut être utilisé pour installer des gestionnaires qui exécutent une copie profonde ou une libération selon les besoins.

Exemple

Utilise le stockage pword de la classe de base pour l'identification du type d'exécution des objets de flux dérivés.

#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';
}

Sortie :

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

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 36 C++98 la valeur stockée pourrait ne pas être
conservée si la référence est invalidée
la valeur stockée est conservée
jusqu'au prochain appel de copyfmt()
LWG 41 C++98 la fonction définissait badbit elle-même en cas d'échec,
mais ios_base ne fournit pas une telle interface
badbit est défini par basic_ios
(si * this est son sous-objet de classe de base)

Voir aussi

redimensionne le stockage privé si nécessaire et accède à l'élément long à l'index donné
(fonction membre publique)
[static]
retourne un entier unique à l'échelle du programme qui peut être utilisé en toute sécurité comme index pour pword() et iword()
(fonction membre publique statique)