applies cklang-tidy fixes
This commit is contained in:
@@ -9,29 +9,28 @@
|
||||
#ifndef SRC_FACTORY_H_
|
||||
#define SRC_FACTORY_H_
|
||||
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include <memory>
|
||||
#include <functional>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
class factory {
|
||||
public:
|
||||
static factory& get_instance();
|
||||
|
||||
template<typename T, typename ...Args>
|
||||
class add {
|
||||
template <typename T, typename... Args> class add {
|
||||
public:
|
||||
add(Args&&... args);
|
||||
|
||||
add(const std::string& name, Args&&... args);
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
static T& get(const std::string& name = "");
|
||||
template <typename T> static T& get(const std::string& name = "");
|
||||
|
||||
void create();
|
||||
|
||||
void destroy();
|
||||
|
||||
private:
|
||||
using destructor = std::function<void(void*)>;
|
||||
using object = std::unique_ptr<void, destructor>;
|
||||
@@ -51,27 +50,15 @@ private:
|
||||
std::map<std::string, object> m_objects;
|
||||
};
|
||||
|
||||
template<typename T, typename ...Args>
|
||||
factory::add<T, Args...>::add(Args&&... args) {
|
||||
add("", args...);
|
||||
template <typename T, typename... Args> factory::add<T, Args...>::add(Args&&... args) { add("", args...); }
|
||||
|
||||
template <typename T, typename... Args> factory::add<T, Args...>::add(const std::string& name, Args&&... args) {
|
||||
factory::get_instance().add_object(name, [args...]() -> object {
|
||||
return object{new T(std::forward<Args>(args)...), [](void* obj) { delete static_cast<T*>(obj); }};
|
||||
});
|
||||
}
|
||||
|
||||
template<typename T, typename ...Args>
|
||||
factory::add<T, Args...>::add(const std::string& name, Args&&... args) {
|
||||
factory::get_instance().add_object(name,
|
||||
[args...] () -> object {
|
||||
return object{
|
||||
new T(std::forward<Args>(args)...),
|
||||
[] (void* obj) {
|
||||
delete static_cast<T*>(obj);
|
||||
}
|
||||
};
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
template<typename T> auto
|
||||
factory::get(const std::string& name) -> T& {
|
||||
template <typename T> auto factory::get(const std::string& name) -> T& {
|
||||
return *static_cast<T*>(factory::get_instance().get_object(name));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user