从模板函数的istream中提取bool

3

我正在将我的字段类读取函数转换为一个模板函数。我有针对int、unsigned int、longunsigned 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,FALSE,以及所有不区分大小写的组合

以下是问题:

  1. C++标准规定使用流提取运算符从哪些有效数据中提取bool
  2. 由于布尔可以用文本表示,这是否涉及到locale
  3. 这是否与平台有关?

我希望通过不编写自己的bool输入处理程序来简化我的代码。

我正在使用MS Visual Studio 2008(版本9)、C++和Windows XP和Vista。

1个回答

2
std::numpunct::truename()std::numpunct::falsename()定义了true和false的字符串。如若我理解文档正确,通过use_facet <numpunct <char> >(stream.getloc()),您可以获取给定流的numpunct
编辑:您可以使用std::noboolalphastd::boolalpha来切换是否使用"1"/"0""true"/"false"

这个大小写不敏感吗? 这是在特定版本/修订版的C++语言中吗? - Thomas Matthews
由于默认值为“true”和“false”,我假设它是区分大小写的。此外,我假设它已经成为标准一段时间了。 - MSN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接