3

我正在将我的字段类读取函数转换为一个模板函数。int, unsigned int, long,我有和的字段类unsigned long。这些都使用相同的方法从 an 中提取值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(Boolean) 类型。Boolean: 有许多文本表示形式
0, 1, T, F, TRUE, FALSE以及所有不区分大小写的组合

以下是问题:

  1. boolC++ 标准说什么是使用流提取运算符提取 a 的有效数据?
  2. 既然布尔值可以用文本来表示,那么这涉及到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::noboolalphaand std::boolalpha

于 2010-05-21T22:50:21.737 回答