namespace std {
template <class charT, class InputIterator = istreambuf_iterator<charT> >
class num_get : public locale::facet;
}
概要
num_getは、入力ストリームから数値・真偽値・ポインタを読み取り、解析するためのロケールファセットである。basic_istreamの数値入力演算子operator>>は、このファセットを介して入力の解析を行う。
テンプレートパラメータInputIteratorは、入力に使用するイテレータの型を表し、既定ではistreambuf_iterator<charT>である。
解析処理はprotectedな仮想関数do_getに実装されており、publicメンバ関数getから呼び出される。このクラスを継承してdo_getをオーバーライドすることで、数値の解析方法をカスタマイズできる。
メンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(constructor) |
コンストラクタ | |
get |
数値の解析 |
静的メンバ変数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
static locale::id id; |
このファセットを識別するためのID |
protectedメンバ関数
| 名前 | 説明 | 対応バージョン |
|---|---|---|
(destructor) |
デストラクタ | |
do_get |
数値の解析 (virtual) |
メンバ型
| 名前 | 説明 | 対応バージョン |
|---|---|---|
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;
}
出力
42
3.14
バージョン
言語
- C++98