C++ 在模板函数中从istream中提取布尔
我正在将我的fields类读取函数转换为一个模板函数。我有C++ 在模板函数中从istream中提取布尔,c++,templates,boolean,istream,istringstream,C++,Templates,Boolean,Istream,Istringstream,我正在将我的fields类读取函数转换为一个模板函数。我有int、unsigned int、long、和unsigned long的字段类。它们都使用相同的方法从istringstream中提取值(仅类型更改): 模板 值类型提取值(常量标准::字符串和输入字符串) { std::istringstream m_string_stream; m_string_stream.str(输入_string); m_string_stream.clear(); m_字符串_流>>值; 返回; } 棘手
int、unsigned int、long、
和unsigned long
的字段类。它们都使用相同的方法从istringstream
中提取值(仅类型更改):
模板
值类型提取值(常量标准::字符串和输入字符串)
{
std::istringstream m_string_stream;
m_string_stream.str(输入_string);
m_string_stream.clear();
m_字符串_流>>值;
返回;
}
棘手的部分是bool
(布尔)类型。布尔值有许多文本表示:0、1、T、F、TRUE、FALSE以及所有不区分大小写的组合
以下是问题:
C++标准所说的是什么?
提取bool
的有效数据,
使用流提取
接线员
因为布尔值可以用
文本,这是否涉及locale
s
这是否依赖于平台
我希望通过不为bool
输入编写自己的处理程序来简化代码
我使用MS VisualStudio 2008(版本9)、C++和WindowsXP和Vista。< /P> < P>字符串的真值和假值由<代码> STD::NoNotht::TruteNeMeNe()和<代码> STD::NoNotht::FalsEnMea.(< /代码>)定义。如果我正确理解文档,您可以使用use_facet(stream.getloc())
获取给定流的numpunt
< >编辑:您可以切换是否使用<代码> >代码> >代码> > 0“<代码> >或<代码>“true”/代码> /<代码>“伪< /代码>:<代码> >代码>和<代码> STD::BooAlpAls> />代码> < /P>这个情况不敏感吗?这是在C++语言的特定版本/修订中吗?因为默认值是“true”和“false”。“,我假设它是区分大小写的。另外,我将假设它已经在标准中使用了一段时间。
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;
}