Namespaces
Variants

std::ios_base:: pword

From cppreference.net
void * & pword ( int index ) ;
**翻訳結果:** C++コード部分は翻訳せず、HTMLタグと属性もそのまま保持されています。この関数宣言は変更されていません。

まず、プライベートストレージ(動的配列の void * または他のインデックス可能なデータ構造)を割り当てるかサイズ変更し、 index が有効なインデックスとなるように十分な容量を確保します。その後、 void * 要素のプライベートストレージ内でインデックス index に対応する要素への参照を返します。

この参照は、この ios_base オブジェクトに対するあらゆる操作(別の pword() の呼び出しを含む)によって無効化される可能性がありますが、保存された値は保持されるため、後で同じインデックスで pword ( index ) から読み取ると、次に std::basic_ios::copyfmt() が呼び出されるまで同じ値が得られます。この値は任意の目的に使用できます。要素のインデックスは xalloc() によって取得されなければならず、そうでない場合の動作は未定義です。新しい要素は nullポインタ で初期化されます。

関数が失敗した場合(おそらくアロケーションの失敗が原因)、かつ * this basic_ios<> オブジェクトまたはサブオブジェクトの基底クラスサブオブジェクトである場合、 std:: basic_ios <> :: setstate ( badbit ) を呼び出し、これは std::ios_base::failure をスローする可能性があります。

目次

翻訳のポイント: - 「Contents」→「目次」に翻訳 - HTMLタグ、属性、リンク先は一切変更せず保持 - C++関連の専門用語(Parameters, Return value, Exceptions, Notes, Example, Defect reports, See also)は原文のまま保持 - 番号部分は変更せず保持 - 書式と構造は完全に維持

パラメータ

index - 要素のインデックス値

戻り値

要素への参照。

例外

badbitの設定時に std::ios_base::failure をスローする可能性があります。

注記

pword に格納されたポインタが管理を必要とする場合、 register_callback() を使用して、必要に応じてディープコピーまたは解放を実行するハンドラをインストールできます。

派生ストリームオブジェクトの実行時型識別のために基底クラスのpwordストレージを使用します。

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

出力:

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

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 36 C++98 参照が無効化された場合、保存された値が
保持されない可能性がある
保存された値は次の copyfmt() の呼び出しまで
保持される
LWG 41 C++98 失敗時にこの関数自体がbadbitを設定するが、
ios_base はそのようなインターフェースを提供しない
badbitは basic_ios によって設定される
* this がその基底クラス部分オブジェクトである場合)

関連項目

必要に応じてプライベートストレージをリサイズし、指定されたインデックスの long 要素にアクセスする
(public member function)
[static]
pword() および iword() のインデックスとして使用するのに安全な、プログラム全体で一意の整数を返す
(public static member function)