-template<typename T>
-T &Collection::get(const std::string &name)
-{
- typedef RefPtr<typename RemoveConst<T>::Type> RPNCT;
-
- ItemMap::iterator i = items.find(name);
- if(i!=items.end())
- return *i->second.value<RPNCT>();
-
- if(CollectionItemTypeBase *type = get_type<T>())
- {
- bool loaded = false;
- if(type->can_create())
- {
- type->create_item(*this, name);
- loaded = items.count(name);
- }
- for(SourceList::iterator j=sources.begin(); (!loaded && j!=sources.end()); ++j)
- {
- (*j)->load(*this, *type, name);
- loaded = items.count(name);
- }
- }
-
- return *get_item(items, name).value<RPNCT>();
-}
-