17 #ifndef CPP_MATE_FORGE_HPP
18 #define CPP_MATE_FORGE_HPP
20 #include <CppMate/Checkers.hpp>
35 template<
typename T,
typename I,
typename P>
73 template<
typename... A>
74 std::unique_ptr<T>
createInstance(
const std::string& name, A&&... args)
const {
75 return getProvider(name).getInstance(std::forward<A>(args)...);
84 template<
typename... A>
88 return pair.second->getInstance(std::forward<A>(args)...);
89 }
catch(
const std::invalid_argument&) {
93 throw std::invalid_argument(
"Appropriate provider not found");
101 std::vector<std::string> names;
103 names.push_back(pair.first);
125 checkArg(provider.get());
126 const auto& name = provider->getInfo().getName();
208 template <
typename T>
Represents abstract factory.
Definition: Forge.hpp:37
void registerProvider(std::unique_ptr< P > provider, bool override=false)
Registers new provider.
Definition: Forge.hpp:124
Factory(const Factory &other)=delete
Disabled copy constructor.
P & getProvider(const std::string &name) const
Returns provider by name.
Definition: Forge.hpp:159
bool deregisterProvider(const std::string &name)
Deregisters provider by name.
Definition: Forge.hpp:138
virtual ~Factory()=default
I getInfo(const std::string &name) const
Returns information about provider by name.
Definition: Forge.hpp:114
Factory & operator=(const Factory &other)=delete
Disabled assign operator.
Factory(Factory &&other)=default
Default move constructor.
Factory & operator=(Factory &&other)=default
Default move operator.
std::unique_ptr< T > requestInstance(A &&... args) const
Tries to create a new instance by provided arguments.
Definition: Forge.hpp:85
std::map< std::string, std::unique_ptr< P > > _providers
Map of providers.
Definition: Forge.hpp:168
std::vector< std::string > getProviders() const
Returns list of provider names.
Definition: Forge.hpp:100
std::unique_ptr< T > createInstance(const std::string &name, A &&... args) const
Creates a new instance by name.
Definition: Forge.hpp:74
Represents information about provider.
Definition: Forge.hpp:175
virtual std::string getName() const
Returns name of provider.
Definition: Forge.hpp:193
std::string _name
Name field.
Definition: Forge.hpp:202
Info(const std::string &name)
Constructor.
Definition: Forge.hpp:182
Represents provider.
Definition: Forge.hpp:210
Provider(const T &info)
Constructor.
Definition: Forge.hpp:217
virtual ~Provider()=default
T _info
Information field.
Definition: Forge.hpp:237
virtual T getInfo() const
Returns information about provider.
Definition: Forge.hpp:228
Definition: BinaryData.hpp:28