template<typename T> friend class CollectionItemType;
private:
- template<typename T, typename S, bool = NeedsCollection<T>::value >
+ template<typename T, typename S, bool = NeedsCollection<typename T::Loader>::value>
struct Add;
Collection &coll;
template<typename T, typename S, typename C>
void coll_item(const std::string &n)
{
- RefPtr<T> it=new T;
+ RefPtr<T> it = new T;
load_sub(*it, dynamic_cast<C &>(coll));
coll.add<S>(n, it.get());
it.release();
template<typename T, typename S>
void item(const std::string &n)
{
- RefPtr<T> it=new T;
+ RefPtr<T> it = new T;
load_sub(*it);
coll.add<S>(n, it.get());
it.release();
}
-
- template<typename, typename, bool> friend class ItemKeyword;
};
private:
{ Collection::Loader::Add<T, S>::add(loader, kwd); }
};
- CreatorBase *creator;
+ CreatorBase *creat;
StoreBase *store;
public:
CollectionItemType():
- creator(0), store(new Store<T>)
+ creat(0), store(new Store<T>)
{ tag = new Tag<T>; }
~CollectionItemType()
{
- delete creator;
+ delete creat;
delete store;
}
}
template<typename C>
- CollectionItemType &create(T *(C::*func)(const std::string &))
+ CollectionItemType &creator(T *(C::*func)(const std::string &))
{
- delete creator;
- creator = new Creator<C>(func);
+ delete creat;
+ creat = new Creator<C>(func);
return *this;
}
{ store->add_to_loader(loader, kwd); }
virtual bool can_create() const
- { return creator!=0; }
+ { return creat!=0; }
virtual void create_item(Collection &coll, const std::string &name) const
{
- if(!creator)
+ if(!creat)
throw std::runtime_error("no creator");
- T *obj = creator->create(coll, name);
- store->store(coll, name, obj);
+ T *obj = creat->create(coll, name);
+ if(obj)
+ store->store(coll, name, obj);
}
};