九、模板单例

九、模板单例

#pragma once

#include "CoreMinimal.h"

/**
 * 
 */

template<class T>
class SLAICOURSE_API SlAiSingleton
{
    
    
public:
	static TSharedPtr<T> Get();

private:

	static void Initialize();

	static TSharedRef<T> Create();

private:

	static TSharedPtr<T> TInstance;
	
};


#include "SlAiSingleton.h"

template<class T>
TSharedPtr<T> SlAiSingleton<T>::TInstance = nullptr;

template<class T>
inline TSharedPtr<T> SlAiSingleton<T>::Get()
{
    
    
	TSharedRef<T> TRef = MakeShareable(new T());
	return TRef;
}

template<class T>
inline void SlAiSingleton<T>::Initialize()
{
    
    
	if (!TInstance.IsValid())
	{
    
    
		TInstance = Create();
	}
}

template<class T>
inline TSharedRef<T> SlAiSingleton<T>::Create()
{
    
    
	Initialize();
	return TInstance;
}

猜你喜欢

转载自blog.csdn.net/m0_51032168/article/details/121478541
今日推荐