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()) {
  // ...
}