logplus/Workflow/WFEngine/Module/include/ModuleFactory.h

95 lines
2.3 KiB
C
Raw Normal View History

2026-01-16 17:18:41 +08:00
/**
* @file ModuleFactory.h
* @brief
* @author dev
* @date 2011-8-30
*/
#ifndef PAI_FRAME_MODULEAPI_MODULEFACTORY_H
#define PAI_FRAME_MODULEAPI_MODULEFACTORY_H
#include <string>
#include <map>
#include "Turtle.h"
/**
* @brief
*/
#define DECLARE_PAI_MODULE(classname) static CModule* CreateInstance(){return new classname();} virtual std::string GetClassName() {return std::string(#classname);} virtual void Delete(){delete this;}
/**
* @brief
*/
#define IMPLEMENT_PAI_MODULE(classname) namespace pai{namespace module{class regist##classname { public:regist##classname(){CModuleFactory::Instance()->Register(#classname,classname::CreateInstance);}};}} \
pai::module::regist##classname g_##classname##_creator;
namespace pai {
namespace module {
class CModule;
/**
* @class CModuleFactory
* @brief 使使<code>ModuleManger</code>
* @see CModuleManager
*/
class PAI_MODULE_EXPORT CModuleFactory
{
public:
/**
* @var typedef CModule* (*pCreateObjectFunction)()
* @brief
*/
typedef CModule* (*pCreateObjectFunction)();
/**
* @brief <code>CModuleFactory</code>
* @return <code>CModuleFactory</code>
*/
static CModuleFactory* Instance();
/**
* @brief
* @param[in] typeID
* @return <code>CModule</code>
*/
CModule* CreateModule(const std::string& typeID);
/**
* @brief
* @param[in] typeID
* @param[in] pFunc
* @return truefalse
*/
bool Register(const std::string& typeID,pCreateObjectFunction pFunc);
private:
/**
* @brief
*/
CModuleFactory():m_mapCreateFunctions()
{
}
/**
* @brief
*/
~CModuleFactory()
{
}
/**
* @brief
*/
CModuleFactory(const CModuleFactory&);
/**
* @brief
*/
CModuleFactory& operator=(const CModuleFactory&);
private:
std::map<std::string,pCreateObjectFunction> m_mapCreateFunctions;
};
}
}
#endif