我如何使用std :: istream读取bool值

时间:2015-06-05 10:51:51

标签: c++ istream

我试图将不同的格式读作csv和json。 一次布尔值由字符串" 1"给出。或" 0"另一次是字符串" true"或"假"。现在我使用统一的模板函数将该字符串转换为bool。 但是std :: istream不能同时读取两种bool格式。 如果设置了标志std :: ios :: boolalpha,则在读取" 1"反之亦然。 我想读两种方式,而且我不知道现在的格式是什么。

1 个答案:

答案 0 :(得分:1)

您始终可以使用本地流来阅读它:

 bool read_bool(std::istream& is) {
     std::istream local(is.rdbuf());
     // now the default stream options are in force

     bool v;
     if (!local >> v)
         throw std::runtime_error("parse error");

否则,您可以选择手动解析输入:

 std::string s;
 if (is >> s) {
      if (s == "0" || s == "false")
           //
      else if (s == "1" || ...

你也可以使用

之类的东西
  • Boost Lexicalcast
  • 提升精神

    qi::symbols<char, bool> table;
    table.add("0",false)("1",true)("false",false)("true",true);
    
    bool v;
    if (is >> qi::match(table, v))
        std::cout << "Parsed: " << v << "\n";