我想将标量解析为bool。 这个例子有效:
#include <yaml.h>
#include <iostream>
#include <sstream>
#include <string>
void operator>> (const YAML::Node & node, bool & b)
{
std::string tmp;
node >> tmp;
std::cout << tmp << std::endl;
b = (tmp == "1") || (tmp == "yes");
}
int main()
{
bool b1, b2;
std::stringstream ss("key: да\notherkey: no");
YAML::Parser parser(ss);
YAML::Node doc;
parser.GetNextDocument(doc);
doc["key"] >> b1;
doc["otherkey"] >> b2;
std::cout << b1 << std::endl;
std::cout << b2 << std::endl;
return 0;
}
但是在更复杂的情况下使用模板运算符:
YAML::operator>><bool> (node=..., value=@0x63f6e8) at /usr/include/yaml-cpp/nodeimpl.h:24
如果字符串不是“是”或“否”,我会得到'YAML :: InvalidScalar'。
答案 0 :(得分:0)
bool
。
是,是的,是的,
生成true
和
n,no,false,off
生成false
。如果您想扩展或更改此行为(例如,以便“да”也生成true
),正如您所发现的那样,operator >>
命名空间中的重载YAML
可以正常工作。
它需要位于YAML
命名空间中的原因(但仅适用于“更复杂的示例” - 意味着您不使用operator >>
参数直接调用bool
) C ++查找的工作方式。
请参阅this answer至my old question以获得更好的解释。