diff options
| -rw-r--r-- | slicer/xml/serializer.cpp | 14 | 
1 files changed, 8 insertions, 6 deletions
diff --git a/slicer/xml/serializer.cpp b/slicer/xml/serializer.cpp index cb0b0e4..369394e 100644 --- a/slicer/xml/serializer.cpp +++ b/slicer/xml/serializer.cpp @@ -229,15 +229,17 @@ namespace Slicer {  		void  		DocumentTreeIterateDictAttrs(const xmlpp::Element::const_AttributeList & attrs, ModelPartParam dict)  		{ +			using AttrMember = Glib::ustring (xmlpp::Attribute::*)() const;  			for (const auto & attr : attrs) {  				auto emp = dict->GetAnonChild();  				emp->Create(); -				auto key = emp->GetChild(keyName); -				auto value = emp->GetChild(valueName); -				key->SetValue(XmlValueSource(attr->get_name())); -				key->Complete(); -				value->SetValue(XmlValueSource(attr->get_value())); -				value->Complete(); +				const auto setChild = [&emp, &attr](const auto & childName, AttrMember attrMember) { +					auto child = emp->GetChild(childName); +					child->SetValue(XmlValueSource((attr->*attrMember)())); +					child->Complete(); +				}; +				setChild(keyName, &xmlpp::Attribute::get_name); +				setChild(valueName, &xmlpp::Attribute::get_value);  				emp->Complete();  			}  		}  | 
