• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    class template
    <syncstream>

    std::basic_syncbuf

    namespace std {
      template<class charT, class traits, class Allocator>
      class basic_syncbuf : public basic_streambuf<charT, traits> { ... };
    
      using syncbuf = basic_syncbuf<char>;
      using wsyncbuf = basic_syncbuf<wchar_t>;
    }
    

    概要

    クラステンプレートbasic_syncbufは、書き込まれた文字データをオブジェクトのアロケータを使って割り当てられた内部バッファに格納する。 格納された文字データは、emit()が呼び出されたとき、またはbasic_syncbufオブジェクトが破棄されたときに、ラップされたストリームバッファオブジェクトに転送される。 このような転送は、同じラップストリームバッファオブジェクトを持つ他のbasic_syncbufオブジェクトによる転送に関してアトミックである。

    エイリアス 説明 対応バージョン
    syncbuf basic_syncbuf<char> C++20
    wsyncbuf basic_syncbuf<wchar_t> C++20

    メンバ

    基底クラスである basic_streambuf も参照のこと。

    メンバ関数

    構築・破棄

    名前 説明 対応バージョン
    (constructor) コンストラクタ C++20
    (destructor) デストラクタ C++20

    割り当てと交換

    名前 説明 対応バージョン
    operator= 代入演算子 C++20
    swap 他のbasic_syncbufオブジェクトと状態を交換する C++20

    その他パブリックメンバ関数

    名前 説明 対応バージョン
    emit ラップされたストリームバッファに出力をアトミックに転送する C++20
    get_wrapped ラップされた streambuf のポインタを取得する C++20
    get_allocator アロケータを取得する C++20
    set_emit_on_sync sync()が呼ばれたときemit()を呼び出すかどうかを設定する C++20

    プロテクテッドなオーバーライドされた仮想メンバ関数

    名前 説明 対応バージョン
    sync フラッシュが保留されていることを記録し、
    現在の同期時排出ポリシーに応じてemit()を呼び出す(デフォルトでは呼び出さない)
    C++20

    メンバ型

    名前 説明 対応バージョン
    char_type charT C++20
    traits_type Traits Traits::char_typeCharTでない場合、プログラムは不適格である C++20
    int_type Traits::int_type C++20
    pos_type Traits::pos_type C++20
    off_type Traits::off_type C++20
    allocator_type Allocator C++20
    streambuf_type std::basic_streambuf<CharT, Traits> C++20

    非メンバ関数

    名前 説明 対応バージョン
    swap 2つのbasic_syncbufオブジェクトを入れ替える C++20

    #include <iostream>
    #include <syncstream>
    #include <thread>
    
    void thread1()
    {
      {
        // std::basic_syncbuf は通常、直接でなく、
        // 対応するストリーム std::osyncstream を通してのみアクセスされる
        std::osyncstream bout{std::cout};
        bout << "Hello, ";
        bout << "World!";
        bout << std::endl; // フラッシュがノートされる
        bout << "and more!\n";
      }   // 文字が転送され、cout はフラッシュする
    }
    
    void thread2()
    {
      // 同じバッファに行われる出力は、異なる std::basic_osyncstream(std::basic_syncbuf) の
      // インスタンスからでも、アトミックに出力されることが保証される
      std::osyncstream(std::cout) << "Goodbye, " << "Planet!" << '\n';
    }
    
    int main()
    {
      std::thread th1(thread1);
      std::thread th2(thread2);
      th1.join();
      th2.join();
    }
    

    出力例

    thread1 の処理が先行した場合。ただし、各出力は連続したシーケンスとなるように、アトミックに行われることが保証される。

    Hello, World!
    and more!
    Goodbye, Planet!
    

    バージョン

    言語

    • C++20

    処理系

    関連項目

    参照