69 lines
2.0 KiB
C++
69 lines
2.0 KiB
C++
#ifndef HGL_PLUG_IN_MANAGE_INCLUDE
|
||
#define HGL_PLUG_IN_MANAGE_INCLUDE
|
||
|
||
#include<hgl/plugin/ExternalPlugIn.h>
|
||
#include<hgl/type/ResManage.h>
|
||
namespace hgl
|
||
{
|
||
/**
|
||
* 插件管理
|
||
*/
|
||
template<typename T,typename C> class PlugInManage:public ResManage<C,PlugIn>
|
||
{
|
||
OSString name; ///<插件类目名称(必须符合代码名称规则)
|
||
|
||
public:
|
||
|
||
PlugInManage(const OSString &n)
|
||
{
|
||
name=n;
|
||
}
|
||
|
||
virtual ~PlugInManager()=default;
|
||
};//template<typename T> class PlugInManage
|
||
|
||
/**
|
||
* 插件注册模板
|
||
*/
|
||
template<typename T,typename CN> class RegistryPlugInProxy
|
||
{
|
||
T *plugin;
|
||
|
||
public:
|
||
|
||
RegistryPlugInProxy()
|
||
{
|
||
plugin=new CN;
|
||
}
|
||
|
||
virtual ~RegistryPlugInProxy()
|
||
{
|
||
delete plugin;
|
||
}
|
||
|
||
T *get(){return plugin;}
|
||
};//template<typename T> class RegistryPlugInProxy
|
||
|
||
/*
|
||
内部插件:
|
||
如Log一类必须存在的插件,直接在代码中一块儿编译链接
|
||
|
||
外部插件:
|
||
如音频音频图片解码编码、压缩解压缩等根据需要加载释放,以独立的.dll/.so/.dylib文件形式存在
|
||
|
||
除log console/log file外,其它所有插件可以是内部插件也可以是外部插件
|
||
*/
|
||
|
||
#ifndef __MAKE_PLUGIN__ //内部插件
|
||
#define REGISTRY_PLUG_IN(name,classname) static RegistryPlugInProxy<name,classname> plugin_proxy_##classname; \
|
||
extern "C" void registry_plugin_##classname;
|
||
#else //外部插件
|
||
#define REGISTRY_PLUG_IN(name,classname) static RegistryPlugInProxy<name,classname> plugin_proxy_##classname \
|
||
extern "C" void registry_plugin_##name(void)
|
||
{
|
||
|
||
}
|
||
#endif//__MAKE_PLUGIN__
|
||
}//namespace hgl
|
||
#endif//HGL_PLUG_IN_MANAGE_INCLUDE
|