@@ -56,25 +56,67 @@ basic_stringbuf(
5656
5757basic_stringbuf(basic_stringbuf&& rhs); // (11) C++11
5858basic_stringbuf(basic_stringbuf&& rhs, const Allocator& a); // (12) C++20
59+
60+ template<class T >
61+ explicit
62+ basic_stringbuf(
63+ const T& t,
64+ ios_base::openmode which = ios_base::in | ios_base::out); // (13) C++26
65+
66+ template<class T >
67+ basic_stringbuf(
68+ const T& t,
69+ const Allocator& a); // (14) C++26
70+
71+ template<class T >
72+ basic_stringbuf(
73+ const T& t,
74+ ios_base::openmode which,
75+ const Allocator& a); // (15) C++26
5976```
6077* ios_base[link /reference/ios/ios_base.md]
6178* basic_string[link /reference/string/basic_string.md]
6279
6380## 概要
6481`basic_stringbuf`オブジェクトを構築する。
6582
83+ - (1) : デフォルトコンストラクタ
84+ - (2) : 指定されたモードで構築する
85+ - (3) : [`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピーと、指定されたモードで構築する
86+ - (4) : モードとアロケータを指定して構築する
87+ - (5) : アロケータを指定して構築する
88+ - (6) : [`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピーと、アロケータを指定して構築する
89+ - (7) : [`std::basic_string`](/reference/string/basic_string.md)オブジェクトのコピー、モード、アロケータを指定して構築する
90+ - (8) : `Allocator`に変換可能なアロケータ型をもつ`std::basic_string`オブジェクトのコピーと、指定されたモードで構築する
91+ - (9) : `Allocator`に変換可能なアロケータ型をもつ`std::basic_string`オブジェクトのコピーと、アロケータを指定して構築する
92+ - (10) : `Allocator`に変換可能なアロケータ型をもつ`std::basic_string`オブジェクトのコピー、モード、アロケータを指定して構築する
93+ - (11) : ムーブコンストラクタ
94+ - (12) : ムーブコンストラクタでアロケータを指定して構築する
95+ - (13) : [`basic_string_view`](/reference/string_view/basic_string_view.md)に変換可能な文字列を初期化し、モードを設定する
96+ - (14) : [`basic_string_view`](/reference/string_view/basic_string_view.md)に変換可能な文字列を初期化、アロケータを設定する
97+ - (15) : [`basic_string_view`](/reference/string_view/basic_string_view.md)に変換可能な文字列を初期化し、モードとアロケータを設定する
98+
99+
100+ ## テンプレートパラメータ制約
101+ - (13), (14), (15) : `is_convertible_v<const T&, basic_string_view<CharT, Traits>>`が`true`であること
102+
103+
66104## 効果
67105- (1) : 内部の文字列バッファを空にし、モードは`ios_base::in | ios_base::out`に設定する
68106- (2) : 内部の文字列バッファを空にし、モードは`which`に設定する
69107- (3) : 内部の文字列バッファを`s`のコピー、モードは`which`に設定する
70108- (4) : 内部の文字列バッファを`std::move(s)`で、モードは`which`に設定する
71109- (5) : 内部の文字列バッファを空にし、モードは`which`、アロケータは`a`に設定する
72- - (6), (7), (8), (9), (10), (11) : 各引数は内部状態の初期化に使用される
73- - (12) : `rhs`から`basic_stringbuf`オブジェクトをムーブ構築する
74- - (13) : `rhs`から`basic_stringbuf`オブジェクトをムーブ構築し、アロケータは`a`を使用する
110+ - (6), (7), (8), (9), (10) : 各引数は内部状態の初期化に使用される
111+ - (11) : `rhs`から`basic_stringbuf`オブジェクトをムーブ構築する
112+ - (12) : `rhs`から`basic_stringbuf`オブジェクトをムーブ構築し、アロケータは`a`を使用する
113+ - (13) : `basic_string_view<CharT, Traits>(t)`で文字列を初期化し、モードは`which`に設定する
114+ - (14) : `basic_string_view<CharT, Traits>(t)`で文字列を初期化し、モードは`ios_base::in | ios_base::out`、アロケータは`a`に設定する
115+ - (15) : `basic_string_view<CharT, Traits>(t)`で文字列を初期化し、モードは`which`、アロケータは`a`に設定する
75116
76117
77118## 例
119+ ### 基本的な使い方
78120```cpp example
79121#include <iostream>
80122#include <sstream>
@@ -95,11 +137,37 @@ int main()
95137* sputc[ link /reference/streambuf/basic_streambuf/sputc.md]
96138* str()[ link str.md]
97139
98- ### 出力
140+ #### 出力
99141```
100142a
101143initial!
102144```
103145
146+ #### string_viewからの構築 (C++26)
147+ ``` cpp example
148+ #include < print>
149+ #include < sstream>
150+ #include < string_view>
151+
152+ int main ()
153+ {
154+ std::string_view sv = "from string literal";
155+ std::stringbuf buf1{sv};
156+ std::println ("{}", buf1.str());
157+
158+ std::string_view sv2 = "from string_view";
159+ std::stringbuf buf2{sv2};
160+ std::println ("{}", buf2.str());
161+ }
162+ ```
163+
164+ #### 出力
165+ ```
166+ from string literal
167+ from string_view
168+ ```
169+
104170## 参照
105- - [ P0408R7 Efficient Access to ` basic_stringbuf ` 's Buffer] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0408r7.pdf )
171+ - [ P0408R7 Efficient Access to ` basic_stringbuf ` 's Buffer] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0408r7.pdf )
172+ - [ P2495R3 Interfacing stringstreams with ` string_view ` ] ( https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/p2495r3.pdf )
173+ - C++26で[ ` std::string_view ` ] ( /reference/string_view/basic_string_view.md ) に対応した
0 commit comments