Core/AppFilesystemComponent: Add support for default resource parameters
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user