使用 YAML-cpp,如何识别未知密钥?

Posted

技术标签:

【中文标题】使用 YAML-cpp,如何识别未知密钥?【英文标题】:Using YAML-cpp, how to identify unknown keys? 【发布时间】:2012-10-31 21:57:15 【问题描述】:

该用例正在逐步执行以 YAML 编写的配置文件。我需要检查每个键并相应地解析其值。我喜欢使用像doc["key"] >> value 这样的随机访问方法的想法,但我真正需要做的是警告用户配置文件中无法识别的键,例如,以防他们拼错了键。如果不遍历文件,我不知道该怎么做。

我知道我可以使用YAML::Iterator 来做到这一点,就像这样

for (YAML::Iterator it=doc.begin(); it<doc.end(); ++it) 
 
   std::string key;
   it.first() >> key;
   if (key=="parameter")  /* do stuff, possibly iterating over nested keys */ 
    else if (/* */) 
    else 
       std::cerr << "Warning: bad parameter" << std::endl;
   

但是有没有更简单的方法来做到这一点?我的方式似乎完全绕过了 YAML-cpp 中内置的任何错误检查,并且似乎取消了随机访问密钥的所有简单性。

【问题讨论】:

【参考方案1】:

如果您担心由于用户拼写错误而导致密钥不存在,您可以使用FindValue

if(const YAML::Node *pNode = doc.FindValue("parameter")) 
   // do something
 else 
   std::cerr << "Parameter missing\n";

如果您真的想在特定列表之外获取地图中的所有键,那么您必须在执行过程中进行迭代。

【讨论】:

是的,我想我必须进行迭代。我也在考虑“创意”用户在左侧字段中输入内容的情况。在没有反馈的情况下,用户可能想知道为什么程序没有问题地接受了他的输入,却没有做他想做的事。

以上是关于使用 YAML-cpp,如何识别未知密钥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在人脸识别 Emgu CV 上检测未知人脸

如何有效识别未知文件格式

面部识别和神经网络分类未知数

如何识别 ReCaptcha V2 的 32 位数据站点密钥以使用 Selenium 和 Python 请求以编程方式获取有效响应?

Azure密钥保管库如何识别访问策略中分配的不同身份

如何将 Emgu.cv 用于未知人员?