namespace X3DTK { template AttributeRecorder::AttributeRecorder(const SFString &name, V T:: *member, const V &init) : X3DAttributeRecorder(), _name(name), _member(member), _init(init) { } template void AttributeRecorder::record(X3DAbstractNode *N) const { SFType *type = N->getType(); std::map::iterator it = type->attributesMap().find(_name); if (it == type->attributesMap().end()) { type->attributesMap()[_name].memberFunctor = new MemberFunctor(_member); type->attributesMap()[_name].loader = new FieldLoader(); FieldWriter *writer = new FieldWriter(); type->attributesMap()[_name].writer = writer; writer->write(type->attributesMap()[_name].init, _init); } static_cast(N)->*_member = _init; } }