#include #include #include #include #include #include #include using Function = std::function; enum class Signal : int { Terminate = SIGTERM, SegmentationFault = SIGSEGV, Interupt = SIGINT, Quit = SIGQUIT, Abort = SIGABRT }; class SignalHandler { private: static std::map> handlers_; static void handle(int signal) { handlers_[signal](); } public: static void register_handler(Signal signal, Function func) { int signal_number = static_cast(signal); handlers_[signal_number] = func; std::signal(signal_number, SignalHandler::handle); } // TODO possible changes if signelton needed later /* static SignalHandler& instance() { static SignalHandler instance; return instance; } */ }; std::map> SignalHandler::handlers_ = {};