- locale[meta header]
- std[meta namespace]
- class template[meta id-type]
namespace std {
template <class charT, class InputIterator = istreambuf_iterator<charT> >
class num_get : public locale::facet;
}
- istreambuf_iterator[link /reference/iterator/istreambuf_iterator.md]
- locale::facet[link /reference/locale/locale/facet.md]
num_getは、入力ストリームから数値・真偽値・ポインタを読み取り、解析するためのロケールファセットである。basic_istreamの数値入力演算子operator>>は、このファセットを介して入力の解析を行う。
テンプレートパラメータInputIteratorは、入力に使用するイテレータの型を表し、既定ではistreambuf_iterator<charT>である。
解析処理はprotectedな仮想関数do_getに実装されており、publicメンバ関数getから呼び出される。このクラスを継承してdo_getをオーバーライドすることで、数値の解析方法をカスタマイズできる。
| 名前 |
説明 |
対応バージョン |
static locale::id id; |
このファセットを識別するためのID |
|
| 名前 |
説明 |
対応バージョン |
char_type |
文字型 charT |
|
iter_type |
入力のイテレータ型 InputIterator |
|
#include <iostream>
#include <locale>
#include <sstream>
#include <iterator>
int main()
{
std::istringstream iss{"42 3.14"};
// ストリームのロケールからnum_getファセットを取得する
const auto& facet = std::use_facet<std::num_get<char>>(iss.getloc());
std::istreambuf_iterator<char> begin{iss}, end{};
std::ios_base::iostate err = std::ios_base::goodbit;
long i = 0;
begin = facet.get(begin, end, iss, err, i);
// 空白文字は解析されないため、読み飛ばす
++begin;
double d = 0.0;
facet.get(begin, end, iss, err, d);
std::cout << i << std::endl;
std::cout << d << std::endl;
}
- std::num_get[color ff0000]
- std::use_facet[link /reference/locale/use_facet.md]
- facet.get[link num_get/get.md]
- iss.getloc()[link /reference/ios/ios_base/getloc.md]
- std::istreambuf_iterator[link /reference/iterator/istreambuf_iterator.md]
- std::ios_base::iostate[link /reference/ios/ios_base/type-iostate.md]
- std::ios_base::goodbit[link /reference/ios/ios_base/type-iostate.md]