我在实现一个递归函数时遇到了问题,该函数遍历了我从解析 json 输入获得的树。
json输入。例如:
{
"attr" : { "a": 1, "ovec": [ { "b": 2, "c": 3 }, { "d": 4} ] }
}
这就是我们所说的“属性的复合值”,该值只是一个 JSON 文档。它的内容是完全任意的(只要它的 JSON 有效)。
问题是,对于 Vector,我必须使用 Value::ConstValueIterator 类型进行循环(与 Object 不同,我使用 Value::ConstMemberIterator)。
我的递归函数将 Value::ConstMemberIterator 作为参数,并且一切正常,直到我在 Vector 中遇到 Vector/Object - 对于递归调用,我需要一个 Value::ConstMemberIterator 类型的迭代器。
“遍历”功能的相关部分:
int parseContextAttributeCompoundValue
(
const Value::ConstMemberIterator& node
)
{
std::string type = jsonParseTypeNames[node->value.GetType()];
if (type == "Array")
{
for (Value::ConstValueIterator iter = node->value.Begin(); iter != node->value.End(); ++iter)
{
std::string nodeType = jsonParseTypeNames[iter->value.GetType()];
if (nodeType == "String")
{
val = iter->GetString();
}
// else if ...
if ((nodeType == "Object") || (nodeType == "Array"))
{
// Here's my problem - need to convert 'iter' to Value::ConstMemberIterator
// in order to recursively call parseContextAttributeCompoundValue for this object/array
parseContextAttributeCompoundValue(iter); // COMPILATION ERROR
}
}
}
else if (type == "Object")
{
for (Value::ConstMemberIterator iter = node->value.MemberBegin(); iter != node->value.MemberEnd(); ++iter)
{
std::string nodeType = jsonParseTypeNames[iter->value.GetType()];
if (nodeType == "String")
{
val = iter->value.GetString();
}
else if (nodeType == "Number")
{
if ((nodeType == "Object") || (nodeType == "Array"))
{
// Here I'm just fine as iter is of the desired type already
parseContextAttributeCompoundValue(iter);
}
}
}
}
我尝试了一些方法,例如调用 iter->value.MemberBegin() 以“转换”为所需的类型,但到目前为止没有任何成功
非常感谢这里的一些帮助......