- spanstream[meta header]
- std[meta namespace]
- class template[meta id-type]
- cpp23[meta cpp]
- spanbuf,wspanbuf[meta alias]
namespace std {
template <class CharT,
class Traits = char_traits<CharT> >
class basic_spanbuf : public basic_streambuf<CharT, Traits>;
using spanbuf = basic_spanbuf<char>;
using wspanbuf = basic_spanbuf<wchar_t>;
}
- char_traits[link /reference/string/char_traits.md]
- basic_streambuf[link /reference/streambuf/basic_streambuf.md]
std::basic_spanbufクラスは、std::span を使用した固定長ストリームバッファである。
| 名前 |
説明 |
対応バージョン |
swap |
2つのオブジェクトを入れ替える |
C++23 |
| 名前 |
説明 |
対応バージョン |
char_type |
テンプレート仮引数CharT |
C++23 |
int_type |
Traits::int_type |
C++23 |
pos_type |
Traits::pos_type |
C++23 |
off_type |
Traits::off_type |
C++23 |
traits_type |
テンプレート仮引数Traits |
C++23 |
#include <iostream>
#include <span>
#include <spanstream>
int main()
{
// basic_spanbufはストリームの内部バッファとして動作する
char buf[256] = {};
std::span<char> span{buf};
std::spanbuf sb(span);
// 書き込み: sputc()で1文字ずつ書き込む
sb.sputc('H');
sb.sputc('e');
sb.sputc('l');
sb.sputc('l');
sb.sputc('o');
// 文字列として取得
std::cout << "Written: " << sb.span().data() << std::endl;
char buf2[256] = "World";
std::span<char> span2{buf2};
// 新しい文字列を設定
sb.span(span2);
// 読み取り: sbumpc()で1文字ずつ読み取る
std::cout << "Read: ";
while (sb.in_avail() > 0) {
char c = sb.sbumpc();
std::cout << c;
}
std::cout << std::endl;
}
- std::spanbuf[color ff0000]
- std::span[link /reference/span/span.md]
- sputc[link /reference/streambuf/basic_streambuf/sputc.md]
- span()[link /reference/spanstream/basic_spanbuf/span.md]
- data()[link /reference/span/span/data.md]
- span(span2)[link /reference/spanstream/basic_spanbuf/span.md]
- sbumpc[link /reference/streambuf/basic_streambuf/sbumpc.md]
- in_avail[link /reference/streambuf/basic_streambuf/in_avail.md]
Written: Hello
Read: World