代码拉取完成,页面将自动刷新
#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____
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。