如何解决Poco::Dynamic::Var 由操作符 [] 创建空对象
我尝试检查 Poco::Dynamic::Var 中是否存在参数。 但是经过检查我发现源对象已更改。出现了一个新参数,我查了一下。
问题:
如何在不修改源对象的情况下检查 Poco::Dynamic::Var 中参数的存在。
代码示例:
void checkParamInConfig(Poco::Dynamic::Var &conf) {
std::cout << "before:" << conf.toString() << std::endl;
// new key problem
if (conf["Configuration"]["NewParam"].isEmpty()) {
std::cout<<"NewParam not found"<<std::endl;
}
std::cout << "after:" << conf.toString() << std::endl;
}
输出:
before:{ "Configuration" : { "Param1" : true,"Param2" : true,"Param3" : true } }
NewParam not found
after:{ "Configuration" : { "NewParam" : null,"Param1" : true,"Param3" : true } }
解决方法
Poco::Dynamic::Var
没有 find()
函数,但 Poco::Dynamic::Struct
有 find()
和 contains()
。
您需要像这样从 Struct
中提取 Var
值:
void checkParamInConfig(Poco::Dynamic::Var &conf)
{
std::cout << "before:" << conf.toString() << std::endl;
auto params = conf["Configuration"];
if (params.isStruct())
{
auto p = params.extract<Poco::Dynamic::Struct<std::string>>();
if (!p.contains("NewParam"))
{
std::cout << "NewParam not found" << std::endl;
}
}
std::cout << "after:" << conf.toString() << std::endl;
}
输出:
before:{ "Configuration" : { "Param1" : true,"Param2" : true,"Param3" : true } }
NewParam not found
after:{ "Configuration" : { "Param1" : true,"Param3" : true } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。