有没有一种简单的方法可以在不使用迭代的情况下使用YAML-cpp在地图中获取密钥?我在说明中看到我可以使用YAML-cpp迭代器类的first()
方法,但我不需要实际迭代。我有一个密钥,我可以通过缩进级别识别,但我现在需要做的是如果密钥不是已知列表之一则抛出异常。我的代码目前看起来像这样:
std::string key;
if (doc.FindValue("goodKey")
{
// do stuff
key = "goodKey";
} else if (doc.FindValue("alsoGoodKey") {
// do stuff
key = "alsoGoodKey";
} else throw (std::runtime_error("unrecognized key");
// made it this far, now let's continue parsing
doc[key]["otherThing"] >> otherThingVar;
// etc.
请参阅,我需要密钥字符串来继续解析,因为otherThing在YAML文件中的goodKey下。这工作正常,但我想告诉用户无法识别的密钥是什么。但是,我不知道如何访问它。我没有在头文件中看到任何给我这个值的函数。我怎么得到它?
答案 0 :(得分:0)
没有一个“无法识别的密钥”。例如,您的YAML文件可能如下所示:
someKey: [blah]
someOtherKey: [blah]
或者它甚至可能是空的,例如{}
。在前一种情况下,你想要哪一个?在后一种情况下,没有钥匙。
您正在询问如何“在地图中获取密钥”,但地图可以包含零个或多个密钥。
作为旁注,您可以使用FindValue
的实际结果简化其中的一部分,假设您实际上不需要您抓取的密钥的名称。例如:
const YAML::Node *pNode = doc.FindValue("goodKey");
if(!pNode)
pNode = doc.FindValue("alsoGoodKey");
if(!pNode)
throw std::runtime_error("unrecognized key");
(*pNode)["otherThing"] >> otherThingVar;
// etc