本文整理汇总了C++中configobject::Ptr::NavigateField方法的典型用法代码示例。如果您正苦于以下问题:C++ Ptr::NavigateField方法的具体用法?C++ Ptr::NavigateField怎么用?C++ Ptr::NavigateField使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类configobject::Ptr
的用法示例。
在下文中一共展示了Ptr::NavigateField方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Dictionary
BOOST_FOREACH(const ConfigObject::Ptr& obj, objs) {
Dictionary::Ptr result1 = new Dictionary();
results->Add(result1);
Dictionary::Ptr resultAttrs = new Dictionary();
result1->Set("attrs", resultAttrs);
BOOST_FOREACH(const String& joinAttr, joinAttrs) {
Object::Ptr joinedObj;
String prefix;
if (joinAttr.IsEmpty()) {
joinedObj = obj;
prefix = type->GetName();
} else {
int fid = type->GetFieldId(joinAttr);
joinedObj = obj->NavigateField(fid);
if (!joinedObj)
continue;
Field field = type->GetFieldInfo(fid);
prefix = field.NavigationName;
}
boost::algorithm::to_lower(prefix);
Type::Ptr joinedType = joinedObj->GetReflectionType();
for (int fid = 0; fid < joinedType->GetFieldCount(); fid++) {
Field field = joinedType->GetFieldInfo(fid);
String aname = prefix + "." + field.Name;
if (!attrs.empty() && attrs.find(aname) == attrs.end())
continue;
Value val = joinedObj->GetField(fid);
/* hide internal navigation fields */
if (field.Attributes & FANavigation) {
Value nval = joinedObj->NavigateField(fid);
if (val == nval)
continue;
}
Value sval = Serialize(val, FAConfig | FAState);
resultAttrs->Set(aname, sval);
}
}