标准库标头 <syncstream> (C++20)
来自cppreference.com
此头文件是输入/输出库的一部分。
包含 | |
| std::basic_ostream 、 std::basic_iostream 类模板与 typedef | |
类 | |
(C++20) |
同步输出设备的包装器 (类模板) |
(C++20) |
同步输出流的包装器 (类模板) |
syncbuf(C++20)
|
std::basic_syncbuf<char>(typedef) |
wsyncbuf(C++20)
|
std::basic_syncbuf<wchar_t>(typedef) |
osyncstream(C++20)
|
std::basic_osyncstream<char>(typedef) |
wosyncstream(C++20)
|
std::basic_osyncstream<wchar_t>(typedef) |
函数 | |
| 特化 std::swap 算法 (函数模板) | |
概要
#include <ostream>
namespace std {
template<class CharT, class Traits = char_traits<CharT>,
class Allocator = allocator<CharT>>
class basic_syncbuf;
using syncbuf = basic_syncbuf<char>;
using wsyncbuf = basic_syncbuf<wchar_t>;
template<class CharT, class Traits = char_traits<CharT>,
class Allocator = allocator<CharT>>
class basic_osyncstream;
using osyncstream = basic_osyncstream<char>;
using wosyncstream = basic_osyncstream<wchar_t>;
}
类模板 std::basic_syncbuf
namespace std {
template<class CharT, class Traits = char_traits<CharT>,
class Allocator = allocator<CharT>>
class basic_syncbuf : public basic_streambuf<CharT, Traits> {
public:
using char_type = CharT;
using int_type = typename Traits::int_type;
using pos_type = typename Traits::pos_type;
using off_type = typename Traits::off_type;
using traits_type = Traits;
using allocator_type = Allocator;
using streambuf_type = basic_streambuf<CharT, Traits>;
// 构造与析构
basic_syncbuf()
: basic_syncbuf(nullptr) {}
explicit basic_syncbuf(streambuf_type* obuf)
: basic_syncbuf(obuf, Allocator()) {}
basic_syncbuf(streambuf_type*, const Allocator&);
basic_syncbuf(basic_syncbuf&&);
~basic_syncbuf();
// 赋值与交换
basic_syncbuf& operator=(basic_syncbuf&&);
void swap(basic_syncbuf&);
// 成员函数
bool emit();
streambuf_type* get_wrapped() const noexcept;
allocator_type get_allocator() const noexcept;
void set_emit_on_sync(bool) noexcept;
protected:
// 覆盖的虚函数
int sync() override;
private:
streambuf_type* wrapped; // 仅用于阐释
bool emit_on_sync{}; // 仅用于阐释
};
// 特化的算法
template<class CharT, class Traits, class Allocator>
void swap(basic_syncbuf<CharT, Traits, Allocator>&,
basic_syncbuf<CharT, Traits, Allocator>&);
}
类模板 std::basic_osyncstream
namespace std {
template<class CharT, class Traits = char_traits<CharT>,
class Allocator = allocator<CharT>>
class basic_osyncstream : public basic_ostream<CharT, Traits> {
public:
using char_type = CharT;
using int_type = typename Traits::int_type;
using pos_type = typename Traits::pos_type;
using off_type = typename Traits::off_type;
using traits_type = Traits;
using allocator_type = Allocator;
using streambuf_type = basic_streambuf<CharT, Traits>;
using syncbuf_type = basic_syncbuf<CharT, Traits, Allocator>;
// 构造与析构
basic_osyncstream(streambuf_type*, const Allocator&);
explicit basic_osyncstream(streambuf_type* obuf)
: basic_osyncstream(obuf, Allocator()) {}
basic_osyncstream(basic_ostream<CharT, Traits>& os, const Allocator& allocator)
: basic_osyncstream(os.rdbuf(), allocator) {}
explicit basic_osyncstream(basic_ostream<CharT, Traits>& os)
: basic_osyncstream(os, Allocator()) {}
basic_osyncstream(basic_osyncstream&&) noexcept;
~basic_osyncstream();
// 赋值与交换
basic_osyncstream& operator=(basic_osyncstream&&) noexcept;
// 成员函数
void emit();
streambuf_type* get_wrapped() const noexcept;
syncbuf_type* rdbuf() const noexcept
{ return const_cast<syncbuf_type*>(addressof(sb)); }
private:
syncbuf_type sb; // 仅用于阐释
};
}