c++ - 在模板函数中从 istream 中提取 bool

标签 c++ templates boolean istream istringstream

我正在将我的字段类读取函数转换为一个模板函数。我有 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( boolean )类型。 boolean 值的文本表示有很多:
0、1、T、F、TRUE、FALSE和所有不区分大小写的组合

问题如下:

  1. C++ 标准说的是什么 用于提取 bool 的有效数据, 使用流提取 接线员?
  2. 因为 boolean 值可以表示为 文本,这是否涉及区域设置
  3. 是否依赖于此平台?

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

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

最佳答案

true 和 false 的字符串由 std::numpunct::truename() 定义和 std::numpunct::falsename() .你可以获得 numpunct对于带有 use_facet <numpunct <char> >(stream.getloc()) 的给定流,如果我正确理解文档的话。

编辑:您可以切换是否使用 "1"/"0""true"/"falsestd::noboolalphastd::boolalpha .

关于c++ - 在模板函数中从 istream 中提取 bool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2885991/

相关文章:

c++ - 在平面上绘制圆, bool 减法 - OpenGL

c++ - 如何避免定义与 boost::spirit::lex 中的所有内容匹配的 token

c# - EditorHelper 是否使用 ViewBag 将数据传递给相应的模板?

java - 生成随机数放入数组中,如果数字是重复抽奖则重新滚动。 boolean 检查 "sometimes"有效

javascript - Angular 2 : Toggle Boolean based on a condition

c++ - 由单个进程的多个实体链接的库中的全局变量

c++ - c++中自适应函数对象的编译错误

c++ - 返回类型协变

boolean - Coq 中的 prop 和 bool

c++ - 如何在 C++ 中选择多维数组中的范围?