|
Sequoia
|
Generic factory with statically defined products. More...
#include <Factory.hpp>
Public Types | |
| using | key = std::string |
| using | vessel = std::variant< Products... > |
| using | names_iterator = utilities::iterator< const_storage_iterator, factory_dereference_policy< const_storage_iterator > > |
Public Member Functions | |
|
template<class... Names> requires (sizeof...(Names) == size()) && (std::is_constructible_v<std::string, Names> && ...) | |
| factory (Names... names) | |
|
template<class... Args> requires (initializable_from<Products, Args...> && ...) | |
| vessel | make (std::string_view name, Args &&... args) const |
|
template<class Product , class... Args> requires ( (std::is_same_v<Product, Products> || ...) && (initializable_from<Products, Args...> && ...)) | |
| vessel | make_or (std::string_view name, Args &&... args) const |
| names_iterator | begin_names () const noexcept |
| names_iterator | end_names () const noexcept |
Static Public Member Functions | |
| static constexpr std::size_t | size () noexcept |
Friends | |
| bool | operator== (const factory &, const factory &) noexcept=default |
Generic factory with statically defined products.
The constructor requires a list of unique key which are internally mapped to the products. To generate a product, clients should call one of make / make_or. The former throws if the supplied string does not match a key; the latter requires specification of a default product which is created in this situation.