0

我想将标量解析为布尔值。这个例子有效:

#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”。

4

1 回答 1

0

按照 YAML 规范的规定, yaml-cppbool默认已经读取 s。

是的,是的,真的,开

生产true, 和

n,不,假,关闭

生产false. 如您所见,如果您想扩展或更改此行为(例如,使“да”也产生),则命名空间中的true重载有效。operator >>YAML

它需要位于YAML命名空间中的原因(但仅适用于“更复杂的示例” - 意味着您不直接operator >>使用bool参数调用)是 C++ 查找的工作方式。

请参阅我的旧问题的这个答案以获得很好的解释。

于 2011-09-07T16:57:29.813 回答