一个引擎系列
对于 Input、Timer 等全局统一对象,使用单例模式来管理,但将 AnEngine 转为动态库后,会出现 exe 中调用单例方法会获取一个和 dll 中不同的对象,导致单例对象实际上存在多个,使用各种方案后终于找到原因。
单例
在单例实现上,模仿以前看过的微软的 HoloToolkit-Unity 中的单例模式,使用了单例模板:
template<typename T>
class Singleton : public NonCopyable
{
friend typename T;
template<typename U> friend class Singleton;
static T* s_uniqueObj;
virtual ~Singleton() = default;
public:
__forceinline static T* Instance()
{
if (s_uniqueObj == nullptr)
{
s_uniqueObj = new T();
}
return s_uniqueObj;
}
};
对于单例类,只需要继承该模板:
class Input : public Singleton<Input>
{
// Implemention};
// 调用Input::Instance()->Function();
}