C++中,你可以很容易地从迭代器中获取底层值。例如:
std::vector<int> numbers = { 1, 2, 3, 4, 5 };
for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
int i = *it;
std::cout << "i = " << i << std::endl;
}
然而,使用rapidjson时,我在从ConstMemberIterator获取底层值方面遇到了困难:
rapidjson::Value* values;
for (rapidjson::Value::ConstMemberIterator it = values->MemberBegin(); it != values->MemberEnd(); ++it) {
rapidjson::Value v = *it; // ERROR!
}
错误:请求将‘rapidjson :: GenericMemberIterator<true,rapidjson :: UTF8<>,rapidjson :: MemoryPoolAllocatorrapidjson :: CrtAllocator> :: ValueType {aka const rapidjson :: GenericMemberrapidjson :: UTF8<,rapidjson :: MemoryPoolAllocatorrapidjson :: CrtAllocator>}’转换为非标量类型‘rapidjson :: Value {aka rapidjson :: GenericValuerapidjson :: UTF8<>}’
rapidjson :: Value v = * it;
我如何获取基础值,以便我可以对其进行进一步操作?
我找到的唯一方法是将值转换为字符串,然后将字符串重新解析为文档,并通过document [it->name.GetString()]进入,因为似乎也没有将值转换为文档的方法。
MemberBegin
是用于 JSON 值为对象的情况。如果是对象,则可以通过it->value
获取该值; - Per Ghosh