最終更新日時:
が更新

履歴 編集

class template
<locale>

std::num_get

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

関連項目