protected:
int sync() override;
概要
フラッシュが保留されていることを記録する。その後、同期時排出ポリシーに応じてemit()
を呼び出す。同期時排出ポリシーはset_emit_on_sync()
で変更することができる。
効果
ラップされたストリームバッファがフラッシュされることを記録する。
その後、同期時排出ポリシーがtrue
ならば、emit()
を呼び出す。
戻り値
emit()
が呼び出されてfalse
を戻した場合は、-1、そうでなければ 0 を返す。
備考
同期時排出ポリシーがfalse
の場合、実際のフラッシュはemit()
が呼び出されるまで遅延する。
例
#include <iostream>
#include <syncstream>
int main()
{
std::osyncstream bout{std::cout};
bout << "Hello, World!";
bout.flush(); // この例では、flush() が rdbuf()->pubsync() を呼び出し、これが rdbuf()->sync() を呼び出している。
// 非同期排出ポリシーはデフォルトで false なので、ここでは rdbuf()->emit() は呼ばれず、
// 実際のフラッシュは、bout 破棄時に rdbuf()->emit() が呼び出されるまで遅延される。
}
12
#include <iostream>
#include <syncstream>
int main()
{
std::osyncstream bout{std::cout};
bout << "Hello, World!";
bout.flush(); // この例では、flush() が rdbuf()->pubsync() を呼び出し、これが rdbuf()->sync() を呼び出している。
// 非同期排出ポリシーはデフォルトで false なので、ここでは rdbuf()->emit() は呼ばれず、
// 実際のフラッシュは、bout 破棄時に rdbuf()->emit() が呼び出されるまで遅延される。
}
出力
Hello, World!
バージョン
言語
- C++20
処理系
- Clang: ??
- GCC: 11.1 ✅
- Visual C++: 2019 update 10 ✅