需求:
利用C++的发射机制,实现根据字符串创建实例对象。
代码:
#ifndef OBJECT_H
#define OBJECT_H#include <string>
#include <map>typedef void* (*Constructor)();class CObjectFactory
{
public:static void registerClass(std::string className, Constructor constructor){constructors()[className] = constructor;}static void* createObject(const std::string& className){Constructor constructor = NULL;if(constructors().find(className) != constructors().end())constructor = constructors().find(className)->second;if ( constructor == NULL )return NULL;return (*constructor)();}private:inline static std::map<std::string, Constructor>& constructors(){static std::map<std::string, Constructor> instance;return instance;}
};#define REGISTER_CLASS(class_name) \
class class_name##Helper { \
public: \class_name##Helper() \{ \CObjectFactory::registerClass(#class_name, class_name##Helper::creatObjFunc); \} \static void* creatObjFunc() \{ \return new class_name; \} \
}; \
class_name##Helper class_name##helper;#endif
使用:
类实现的时候,进行注册。
场景是什么?
类似与这种流程图,有很多算子,我在注册的时候,将算子的类名作为参数,拖拽结束后,获取类名字符串,自动创建对象。
问题:
构造的时候,没办法传参。