C++ 如何确定在yaml cpp中处理的节点类型?
我在这里阅读教程代码: 例如:C++ 如何确定在yaml cpp中处理的节点类型?,c++,yaml-cpp,C++,Yaml Cpp,我在这里阅读教程代码: 例如: YAML::Node primes = YAML::Load("[2, 3, 5, 7, 11]"); for (YAML::const_iterator it=primes.begin();it!=primes.end();++it) { std::cout << it->as<int>() << "\n"; } YAML::Node lineup = YAML::Load("{1B: Prince Fielde
YAML::Node primes = YAML::Load("[2, 3, 5, 7, 11]");
for (YAML::const_iterator it=primes.begin();it!=primes.end();++it) {
std::cout << it->as<int>() << "\n";
}
YAML::Node lineup = YAML::Load("{1B: Prince Fielder, 2B: Rickie Weeks, LF: Ryan Braun}");
for(YAML::const_iterator it=lineup.begin();it!=lineup.end();++it) {
std::cout << "Playing at " << it->first.as<std::string>() << " is " << it->second.as<std::string>() << "\n";
}
对于任意YAML输入,如何在不使用try/catch块的情况下确定我是在处理循环中的序列还是映射(即是否应该使用->first)
我试图查找文档,但找不到
更新:
这就是我想做的:
YAML::Node config = YAML::LoadFile(filename);
for (YAML::const_iterator it=config.begin();it!=config.end();++it) {
if (it->Type() == YAML::NodeType::Map) { // exception
std::cout << it->first.as<std::string>();
} else if (it->Type() == YAML::NodeType::Sequence) {
std::cout << it->as<std::string>();
}
}
YAML::Node config=YAML::LoadFile(文件名);
对于(YAML::const_迭代器it=config.begin();it!=config.end();++it){
如果(it->Type()==YAML::NodeType::Map){//异常
std::cout first.as();
}else if(it->Type()==YAML::NodeType::Sequence){
std::cout as();
}
}
但是当我运行代码时,我得到了如上所述的异常。它编译得很好
我使用的是Ubuntu14.04(0.5.1)附带的yaml cpp
switch (node.Type()) {
case Null: // ...
case Scalar: // ...
case Sequence: // ...
case Map: // ...
case Undefined: // ...
}
或显式查询,例如:
if (node.IsSequence()) {
// ...
}
(我在教程中添加了这一点。)
编辑:在您的特定示例中,您应该在迭代之前检查
config.Type()
,而不是迭代过程中任何节点的类型。感谢您的回答Jesse,但我不太确定这是如何解决我遇到的问题的。我的问题是,我无法确定如何获取可以调用这些函数的节点对象。我已将我试图编写的代码添加到我的问题中。@jeremy,我更新了我的答案,以适应您的具体示例。
if (node.IsSequence()) {
// ...
}