typedef Msp::TypeRegistry<CreateObject, DynamicObjectLoader &> TypeRegistry;
Collection *coll;
-private:
T *object;
+private:
Loader *obj_loader;
std::function<void(Collection &, const std::string &, T *)> store_func;
public:
T *get_object() { T *o = object; object = 0; return o; }
- void store_object(Collection &, const std::string &);
+ T *store_object(Collection &, const std::string &);
-private:
- void type(const Symbol &);
+protected:
+ virtual void type(const Symbol &);
+private:
template<typename U>
typename std::enable_if<NeedsCollection<typename U::Loader>::value, typename U::Loader *>::type create_object_loader(U &obj) const;
}
template<typename T, typename C>
-void DynamicObjectLoader<T, C>::store_object(Collection &c, const std::string &name)
+T *DynamicObjectLoader<T, C>::store_object(Collection &c, const std::string &name)
{
if(!store_func)
throw std::logic_error("no store function");
+ T *o = object;
store_func(c, name, object);
object = 0;
+ return o;
}
template<typename T, typename C>
ldr.object = obj;
ldr.obj_loader = ldr.create_object_loader<U>(*obj);
ldr.add_auxiliary_loader(*ldr.obj_loader);
- ldr.store_func = [&ldr](Collection &c, const std::string &n, T *o){ c.add(n, static_cast<U *>(o)); };
+ ldr.store_func = [](Collection &c, const std::string &n, T *o){ c.add(n, static_cast<U *>(o)); };
}
} // namespace DataFile