我试图将不同的格式读作csv和json。 一次布尔值由字符串" 1"给出。或" 0"另一次是字符串" true"或"假"。现在我使用统一的模板函数将该字符串转换为bool。 但是std :: istream不能同时读取两种bool格式。 如果设置了标志std :: ios :: boolalpha,则在读取" 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" || ...
等
你也可以使用
之类的东西提升精神
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";