]> git.tdb.fi Git - libs/datafile.git/commitdiff
Tweak DynamicObjectLoader to make it extensible
authorMikko Rasa <tdb@tdb.fi>
Thu, 7 Oct 2021 12:54:23 +0000 (15:54 +0300)
committerMikko Rasa <tdb@tdb.fi>
Thu, 7 Oct 2021 12:54:23 +0000 (15:54 +0300)
Subclasses can now override te type handler and access the object without
clearing it, for example to perform some custom initialization after the
object has been created.

source/dynamicobjectloader.h

index e29633d7b6724ab7bc39071a39938887e851dcf3..551a0a63dd1f454cbc691cbe53ebf96b620f23f1 100644 (file)
@@ -31,8 +31,8 @@ protected:
        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;
 
@@ -50,9 +50,10 @@ public:
        T *get_object() { T *o = object; object = 0; return o; }
        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;