- spanstream[meta header]
- std[meta namespace]
- basic_ispanstream[meta class]
- function[meta id-type]
- cpp23[meta cpp]
explicit basic_ispanstream(std::span<charT> s,
ios_base::openmode which = ios_base::in); // (1)
basic_ispanstream(const basic_ispanstream&) = delete; // (2)
basic_ispanstream(basic_ispanstream&& rhs); // (3)
template<class ROS>
explicit basic_ispanstream(ROS&& s); // (4)- ios_base[link /reference/ios/ios_base.md]
- std::span[link /reference/span/span.md]
basic_ispanstreamオブジェクトを構築する。
- (1) : 入力データとして
std::spanオブジェクト、およびモードを指定して構築する - (2) : (削除)
- (3) : ムーブコンストラクタ
- (4) :
sからstd::span型の固定長バッファを作成し、構築する
- (4) :
ROSがranges::borrowed_rangeの要求を満たすこと ((!convertible_to<ROS, std::span<charT>>) && convertible_to<ROS, std::span<const charT>>がtrueであること)。
- (1) : 内部で保持している
basic_spanbuf<charT, traits>型の固定長バッファをsbとすると、ベースクラスをbasic_istream<charT, traits>(addressof(sb))で構築し、さらにsbをbasic_spanbuf<charT, traits>(s, which | ios_base::in)で初期化する - (2) : (削除)
- (3) : 内部で保持している
basic_spanbuf<charT, traits>型の固定長バッファをsbとすると、ベースクラスをstd::move(rhs)で構築し、さらにsbをstd::move(rhs.sb)で初期化する。続いて、basic_istream<charT, traits>::set_rdbuf(addressof(sb))を呼び、basic_spanbufを設定する。 - (4) :
std::span<const charT>(std::forward<ROS>(s))をspとした時、basic_ispanstream(std::span<charT>(const_cast<charT*>(sp.data()), sp.size()))と同等
#include <iostream>
#include <span>
#include <spanstream>
int main()
{
char buf[32] = "hello";
std::span<char> span{buf};
// (1) std::spanから構築
std::ispanstream iss1{span};
std::cout << iss1.span().data() << std::endl;
// (3) ムーブ構築
std::ispanstream iss3{std::move(iss1)};
std::cout << iss3.span().data() << std::endl;
}- std::span[link /reference/span/span.md]
- span()[link span.md]
- data()[link /reference/span/span/data.md]
- std::move[link /reference/utility/move.md]
hello
hello
- C++23
- Clang: ??
- GCC: ??
- Visual C++: ??