1 Star 1 Fork 0

俞寅达/nicenet

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
Module.h 2.13 KB
一键复制 编辑 原始数据 按行查看 历史
俞寅达 提交于 2021-10-13 11:18 . memory leak
#ifndef ____MODULE____
#define ____MODULE____
#include "NoCopy.h"
#include <typeinfo>
#include "Type.h"
namespace nicehero
{
template <typename T>
class Module:public NoCopy
{
class Zero
{
public:
operator int() const;
private:
char m_reserved[11];
};
class True
{
public:
operator bool() const;
private:
char m_reserved[11];
};
public:
static T * getInstance(void);
bool isStarted() const;
True checkStart();
const char* getModuleName() const;
protected:
Module();
virtual ~Module() = 0;
Zero initial();
Zero start();
Zero run();
Zero stop();
private:
bool m_started;
unsigned int m_refs;
const char * m_moduleName;
static T* m_instance;
bool checkStop();
};
template <typename T>
nicehero::Module<T>::~Module()
{
}
template <typename T>
nicehero::Module<T>::Module()
{
if (sizeof(static_cast<T *>(0)->initial()) == sizeof(int) || sizeof(static_cast<T *>(0)->initial()) == sizeof(bool))
{
initial();
}
m_moduleName = typeid(*this).name();
}
template <class T>
Module<T>::Zero::operator int() const
{
return 0;
}
template <class T>
Module<T>::True::operator bool() const
{
return true;
}
template <class T>
bool Module<T>::isStarted() const
{
return m_started;
}
template <class T>
typename Module<T>::True Module<T>::checkStart()
{
return True();
}
template <class T>
typename Module<T>::Zero Module<T>::initial()
{
return Zero();
}
template <class T>
typename Module<T>::Zero Module<T>::start()
{
return Zero();
}
template <class T>
typename Module<T>::Zero Module<T>::run()
{
return Zero();
}
template <class T>
typename Module<T>::Zero Module<T>::stop()
{
return Zero();
}
template <class T>
bool Module<T>::checkStop()
{
return m_refs == 0;
}
template <class T>
const char* Module<T>::getModuleName() const
{
return m_moduleName;
}
}
#define MODULE_IMPL(T) \
namespace nicehero \
{\
template <> \
T* Module<T>::m_instance = nullptr;\
template <> \
T * Module<T>::getInstance() \
{ \
static T g_instance;\
m_instance = &g_instance;\
return m_instance; \
}\
}\
#endif // !____MODULE____
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/nicehero/nicenet.git
[email protected]:nicehero/nicenet.git
nicehero
nicenet
nicenet
master

搜索帮助