19 #include "PlatformDep.h" 20 #include "IqrfLogging.h" 32 template<
typename T,
typename R>
37 typedef std::function<std::unique_ptr<T>(R&)> CreateObjectFunc;
39 std::map<std::string, CreateObjectFunc> m_creators;
49 static std::unique_ptr<T> createObject(R& representation) {
50 return std::unique_ptr<T>(ant_new S(representation));
61 if (m_creators.find(
id) != m_creators.end()){
62 THROW_EX(std::logic_error,
"Duplicit registration of: " << PAR(
id));
64 m_creators.insert(std::make_pair(
id, createObject<S>));
73 return m_creators.find(
id) != m_creators.end();
83 std::unique_ptr<T>
createObject(
const std::string&
id, R& representation){
84 auto iter = m_creators.find(
id);
85 if (iter == m_creators.end()){
86 THROW_EX(std::logic_error,
"Unregistered creator for: " << PAR(
id));
89 return std::move(iter->second(representation));
std::unique_ptr< T > createObject(const std::string &id, R &representation)
Create object based on data representation.
Definition: ObjectFactory.h:83
void registerClass(const std::string &id)
Template function to register object creator function.
Definition: ObjectFactory.h:60
Create object based on data representation.
Definition: ObjectFactory.h:33
bool hasClass(const std::string &id)
Check if a creator object is registered.
Definition: ObjectFactory.h:72