解析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;
}
我可以使用上面的代码吗?
答案 0 :(得分:1)
是的,确实如此 - 一旦解析Node
,它就不依赖于Parser
的任何内存。
也就是说,在您的示例中,您实际上从未构造globalRoot
指向的节点。你需要打电话
globalRoot = new YAML::Node;
甚至更好,将其保存在std::auto_ptr
等智能指针中。