std::ios_base:: pword
|
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) |