Make default_application_factory support a custom factory callback

This commit is contained in:
Nikita Lisitsa 2023-07-21 01:30:57 +03:00
parent 6ee75f8bae
commit 7f5d50787d

View file

@ -7,16 +7,18 @@
namespace psemek::app namespace psemek::app
{ {
template <typename Application> template <typename Factory>
std::unique_ptr<application::factory> default_application_factory(application::options const & options) std::unique_ptr<application::factory> default_application_factory(application::options const & options, Factory && factory)
{ {
struct factory_impl struct factory_impl
: application::factory : application::factory
{ {
application::options opts; application::options opts;
Factory factory;
factory_impl(application::options const & options) factory_impl(application::options const & options, Factory && factory)
: opts(options) : opts(options)
, factory(std::move(factory))
{} {}
application::options options() override application::options options() override
@ -26,11 +28,20 @@ namespace psemek::app
std::unique_ptr<application> create(application::options const & options, application::context const & context) override std::unique_ptr<application> create(application::options const & options, application::context const & context) override
{ {
return std::make_unique<Application>(options, context); return factory(options, context);
} }
}; };
return std::make_unique<factory_impl>(options); return std::make_unique<factory_impl>(options, std::move(factory));
}
template <typename Application>
std::unique_ptr<application::factory> default_application_factory(application::options const & options)
{
return default_application_factory(options, [](auto const & options, auto const & context){
return std::make_unique<Application>(options, context);
});
} }
} }