如何重载运算符>>对于布尔

时间:2011-09-07 16:16:35

标签: yaml-cpp

我想将标量解析为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'。

1 个答案:

答案 0 :(得分:0)

根据YAML规范的规定,yaml-cpp默认已经读取bool

  

是,是的,是的,

生成true

  

n,no,false,off

生成false。如果您想扩展或更改此行为(例如,以便“да”也生成true),正如您所发现的那样,operator >>命名空间中的重载YAML可以正常工作。

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

请参阅this answermy old question以获得更好的解释。