3

フィールド クラスの読み取り関数を 1 つのテンプレート関数に変換しています。と のフィールド クラスがint, unsigned int, long,ありunsigned longます。これらはすべて、から値を抽出するために同じ方法を使用しますistringstream(型のみが変わります)。

template <typename Value_Type>
Value_Type Extract_Value(const std::string& input_string)
{
    std::istringstream    m_string_stream;
    m_string_stream.str(input_string);
    m_string_stream.clear();
    m_string_stream >> value;
    return;
}

トリッキーな部分はbool(ブール) 型にあります。
0, 1, T, F, TRUE, FALSEBoolean:には多くのテキスト表現があり、大文字と小文字を区別しないすべての組み合わせがあります

質問は次のとおりです。

  1. C++ 標準ではbool、ストリーム抽出演算子を使用して a を抽出するための有効なデータとは何ですか?
  2. Boolean はテキストで表すことができるので、これにはlocales が含まれますか?
  3. これはプラットフォームに依存しますか?

入力用の独自のハンドラーを作成しないことで、コードを簡素化したいと考えていboolます。

MS Visual Studio 2008 (バージョン 9)、C++、および Windows XP と Vista を使用しています。

4

1 に答える 1

2

true と false の文字列は と で定義されstd::numpunct::truename()ますstd::numpunct::falsename()。ドキュメントを正しく理解していればnumpunct、特定のストリームの を取得できます。use_facet <numpunct <char> >(stream.getloc())

"1"編集: /"0"または"true"/"falsestd::noboolalphaとで使用するかどうかを切り替えることができますstd::boolalpha

于 2010-05-21T22:50:21.737 に答える