0

在解析 yaml 文件时,通常我们从解析器获取根节点。

而且我想知道在解析过程之后是否可以引用根节点。如下所示。

YAML::Node* globalRoot;

void ParseDocument(filename)
{
  YAML::Parser parser(fin)
  parser.GetNextDocument(*globalRoot);
}

void myFunction()
{
  ParseDocument("myYAML.yml");

  // After the method above, we lose the parser instance since it's a local variable.
  // But if all child data is copied, below code should be safe.
  // If globalRoot is just pointing inside the parser, this could be dangerous.

  std::string stringKey;
  (*globalRoot)["myKey"] >> stringKey;
}

我可以使用上面的代码吗?

4

1 回答 1

2

是的,它确实如此——一旦 aNode被解析,它就不再依赖于Parser.

也就是说,在您的示例中,您实际上从未构造 . 指向的节点globalRoot。你需要打电话

globalRoot = new YAML::Node;

甚至更好的是,将它保存在一个智能指针中,如std::auto_ptr.

于 2011-02-23T04:03:33.197 回答