#pragma once #include <unistd.h> #include "common.hpp" POLYBAR_NS namespace factory_util { struct null_deleter { template <typename T> void operator()(T*) const {} }; struct fd_deleter { void operator()(int* fd) const { if (fd != nullptr && *fd > 0) { close(*fd); } } }; template <class InstanceType, class... Deps> unique_ptr<InstanceType> generic_instance(Deps... deps) { return make_unique<InstanceType>(deps...); } template <class InstanceType, class... Deps> shared_ptr<InstanceType> generic_singleton(Deps... deps) { static auto instance = make_shared<InstanceType>(deps...); return instance; } } POLYBAR_NS_END