product_type* create_object(const key_type& key,const std::string& file) { typename product_map::const_iterator pos=map_.find(key); if (pos!=map_.end()) { return (pos->second)(file); } return on_unknown_type(key); }
product_type* create_object(key_type const& key, Args...args) { typename product_map::const_iterator pos=map_.find(key); if (pos!=map_.end()) { return (pos->second)(args...); } return 0; }
product_type* create_object(const key_type& key, char const* data, std::size_t size) { typename product_map::const_iterator pos=map_.find(key); if (pos!=map_.end()) { return (pos->second)(data, size); } return 0; }
bool unregister_product(const key_type& key) { return map_.erase(key)==1; }
bool register_product(const key_type& key,product_creator creator) { return map_.insert(typename product_map::value_type(key,creator)).second; }