21 std::shared_ptr<ConfigurableOrcaObject>
createPtr(
const std::string& instance_name,
const std::string& class_name)
23 if(instance_name.empty())
25 std::cout <<
"[Factory] Instance name is empty !" <<
'\n';
31 std::cout <<
"[Factory] Class name '" << class_name <<
"' is not present in the factory." <<
'\n';
33 std::cout <<
"[Factory] Did you forget to add ORCA_REGISTER_CLASS(" << class_name <<
") at the end to the class cpp file ?" <<
'\n';
36 auto c = m_[class_name](instance_name);
42 std::cout <<
"[Factory] '" << instance_name <<
"' of type " << class_name <<
" successfully created" <<
'\n';
45 bool registerClass(
const std::string& class_name,std::function<std::shared_ptr<ConfigurableOrcaObject>(
const std::string&)> f)
49 std::cout <<
"[Factory] " <<
"Successfully registered class " << class_name <<
'\n';
57 std::cout <<
"[Factory] Factory is empty !" <<
'\n';
60 std::cout <<
"[Factory] Available classes : " <<
'\n';
63 std::cout <<
" - " << c.first <<
'\n';
67 std::map<std::string,std::function<std::shared_ptr<ConfigurableOrcaObject>(
const std::string&)> > m_;
74 #define ORCA_REGISTER_CLASS(CLASSNAME,...) \ 76 bool ok##__VA_ARGS__ = ::orca::common::Factory::Instance()->registerClass(#CLASSNAME,[](const std::string& name) { return std::make_shared<CLASSNAME>(name); }); \ bool registerClass(const std::string &class_name, std::function< std::shared_ptr< ConfigurableOrcaObject >(const std::string &)> f)
Definition: Factory.h:45
void printAvailableClasses()
Definition: Factory.h:53
std::shared_ptr< ConfigurableOrcaObject > createPtr(const std::string &instance_name, const std::string &class_name)
Definition: Factory.h:21
static Factory * Instance()
Definition: Factory.h:16
bool key_exists(const std::map< Key, Vals > &container, const Key &key)
Definition: Utils.h:247
Definition: CartesianAccelerationPID.h:44