template<typename B>
struct Extractor: CollectionItemTypeBase::Extractor<B>
{
- virtual B &extract(const Variant &var) const
+ B &extract(const Variant &var) const override
{ return *var.value<RefPtr<T> >(); }
};
return *this;
}
- virtual bool is_same_type(const CollectionItemTypeBase &other) const
+ bool is_same_type(const CollectionItemTypeBase &other) const override
{ return dynamic_cast<const CollectionItemType<T> *>(&other); }
- virtual bool check_item_type(const Variant &var) const
+ bool check_item_type(const Variant &var) const override
{ return var.check_type<RefPtr<T> >(); }
- virtual void add_to_loader(Collection::Loader &) const
+ void add_to_loader(Collection::Loader &) const override
{ }
- virtual bool can_create() const
+ bool can_create() const override
{ return static_cast<bool>(create_func); }
- virtual void create_item(Collection &coll, const std::string &name) const
+ void create_item(Collection &coll, const std::string &name) const override
{
if(!create_func)
throw std::runtime_error("no creator");
coll.add(name, obj);
}
- virtual void load_item(Collection &, Parser &, const std::string &) const
+ void load_item(Collection &, Parser &, const std::string &) const override
{
throw std::runtime_error("this type cannot be loaded");
}
- virtual void notify_item(const std::string &name, const Variant &var) const
+ 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)
class LoadableCollectionItemType: public CollectionItemType<T>
{
public:
- virtual void add_to_loader(Collection::Loader &loader) const
+ void add_to_loader(Collection::Loader &loader) const override
{ loader.add(this->kwd, &Collection::Loader::item<T, T>); }
- virtual void load_item(Collection &coll, Parser &parser, const std::string &name) const
+ void load_item(Collection &coll, Parser &parser, const std::string &name) const override
{
RefPtr<T> obj = new T;
Collection::ItemLoader<T> ldr(*obj, coll);