Core/AppFilesystemComponent: Add support for default resource parameters

This commit is contained in:
SirLynix
2023-01-28 11:27:49 +01:00
parent 60c00068ca
commit d27ca55943
24 changed files with 364 additions and 85 deletions

View File

@@ -7,6 +7,39 @@
namespace Nz
{
namespace Detail
{
template<typename, typename, typename = void>
struct ModuleHasRegister : std::false_type {};
template<typename M, typename C>
struct ModuleHasRegister<M, C, std::void_t<decltype(std::declval<M>().RegisterComponent(std::declval<C&>()))>> : std::true_type {};
template<typename> struct ModuleRegisterer;
template<typename Module, typename... Rest>
struct ModuleRegisterer<TypeList<Module, Rest...>>
{
template<typename T, typename C>
static void Register(T& modules, C& component)
{
if constexpr (ModuleHasRegister<Module, C>::value)
modules.template Get<Module>().RegisterComponent(component);
ModuleRegisterer<TypeList<Rest...>>::Register(modules, component);
}
};
template<>
struct ModuleRegisterer<TypeList<>>
{
template<typename T, typename C>
static void Register(T& /*modules*/, C& /*component*/)
{
}
};
}
template<typename... ModuleList>
template<typename... ModuleConfig>
Application<ModuleList...>::Application(ModuleConfig&&... configs) :
@@ -30,6 +63,16 @@ namespace Nz
{
}
template<typename... ModuleList>
template<typename T, typename... Args>
T& Application<ModuleList...>::AddComponent(Args&&... args)
{
T& component = ApplicationBase::AddComponent<T>(std::forward<Args>(args)...);
Detail::ModuleRegisterer<typename decltype(m_modules)::ModuleTypeList>::template Register(m_modules, component);
return component;
}
template<typename... ModuleList>
Application<ModuleList...>::~Application()
{