// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Interfaces/ISubmitToolService.h" template concept DerivedFromISubmitToolService = std::is_base_of::value; class FSubmitToolServiceProvider final { public: template TSharedPtr GetService() { FString TypeIdx = TNameOf::GetName(); if(Services.Contains(TypeIdx)) { return StaticCastSharedPtr(Services[TypeIdx]); } return nullptr; } template TSharedPtr GetService(const FString& InName) { if (Services.Contains(InName)) { return StaticCastSharedPtr(Services[InName]); } return nullptr; } template void RegisterService(TSharedRef InService) { TSharedPtr& Service = Services.FindOrAdd(TNameOf::GetName()); ensureAlwaysMsgf(Service == nullptr, TEXT("Service %s was re-registered"), TNameOf::GetName()); Service = StaticCastSharedPtr(InService.ToSharedPtr()); } template void RegisterService(TSharedRef InService, const FString& InName) { TSharedPtr& Service = Services.FindOrAdd(InName); ensureAlwaysMsgf(Service == nullptr, TEXT("Service %s was re-registered"), *InName); Service = StaticCastSharedPtr(InService.ToSharedPtr()); } private: TMap> Services; };