ItemCreatorBridge<S> *creator=dynamic_cast<ItemCreatorBridge<S> *>(this);
if(creator)
{
- creator->create(coll, name, ptr);
+ ptr=creator->create(coll, name);
return true;
}
return false;
template<typename S>
struct ItemCreatorBridge: public ItemCreatorBase
{
- virtual bool create(Collection &, const std::string &, S *&) const =0;
+ virtual S *create(Collection &, const std::string &) const =0;
};
template<typename T, typename S, typename C>
void add(const std::string &name, T *d)
{
if(items.count(name))
- throw KeyError("Duplicate key '"+name+"' in collection");
+ throw KeyError("Duplicate key in collection", name);
items[name]=new Item<typename RemoveConst<T>::Type>(d);
}
ItemMap::const_iterator i=items.find(name);
if(i==items.end())
- throw KeyError("Item '"+name+"' not found in collection");
+ throw KeyError("Item not found in collection", name);
const Item<NCT> *item=dynamic_cast<const Item<NCT> *>(i->second);
if(!item)
- throw TypeError("Item '"+name+"' is not of correct type");
+ throw TypeError("Type mismatch on item '"+name+"'");
- return *item->data;
+ return item->data;
}
/**
{
// We already know that the item didn't exist yet
items[name]=new Item<NCT>(d);
- return *d;
+ return d;
}
}
- throw KeyError("Item '"+name+"' not found in collection");
+ throw KeyError("Item not found in collection", name);
}
const Item<NCT> *item=dynamic_cast<const Item<NCT> *>(i->second);
if(!item)
- throw TypeError("Item '"+name+"' is not of correct type");
+ throw TypeError("Type mismatch on item '"+name+"'");
- return *item->data;
+ return item->data;
}
/**