+ void load_item(Collection &, Parser &, const std::string &) const override
+ {
+ throw std::runtime_error("this type cannot be loaded");
+ }
+
+ void notify_item(const std::string &name, const Variant &var) const override
+ {
+ RefPtr<T> obj = var.value<RefPtr<T> >();
+ for(const auto &n: notify_funcs)
+ n(name, *obj);
+ }
+};
+
+
+template<typename T>
+class LoadableCollectionItemType: public CollectionItemType<T>
+{
+public:
+ void add_to_loader(Collection::Loader &loader) const override
+ { loader.add(this->kwd, &Collection::Loader::item<T, T>); }
+
+ void load_item(Collection &coll, Parser &parser, const std::string &name) const override