2012-10-31 24 views
1

用例正在遍历用YAML编写的配置文件。我需要检查每个键并相应地解析其值。我喜欢使用随机访问方法(如doc["key"] >> value)的想法,但我真正需要做的是在配置文件中警告用户无法识别的密钥,以防他们拼写错误的密钥。我不知道如何做到这一点没有迭代通过该文件。使用YAML-cpp,如何识别未知密钥?

我知道我可以使用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中的任何错误检查,并且它似乎取消了随机访问密钥的所有简单性。

回答

2

如果你担心,因为用户拼错它的关键不在那里,你可以用FindValue

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

如果你真正希望得到您的具体名单之外的地图中所有的键,那么你将不得不迭代,因为你在做什么。

+0

是的,我想我必须迭代,然后。我也在考虑“创意”用户在左栏中输入内容的情况。没有反馈,用户可能会问为什么程序没有问题就接受了他的输入,却没有做到他想做的。 – Fadecomic