polybar/include/utils/scope.hpp

45 lines
947 B
C++
Raw Normal View History

2016-06-15 03:32:35 +00:00
#pragma once
2016-11-20 22:04:31 +00:00
// TODO: move to functional.hpp
2016-06-15 03:32:35 +00:00
#include "common.hpp"
#include "components/logger.hpp"
2016-12-09 08:02:47 +00:00
#include "utils/factory.hpp"
2016-06-15 03:32:35 +00:00
2016-11-19 05:22:44 +00:00
POLYBAR_NS
2016-06-15 03:32:35 +00:00
namespace scope_util {
template <typename... Args>
class on_exit {
public:
on_exit(function<void(Args...)>&& fn, Args... args) : m_callback(bind(fn, args...)) {}
virtual ~on_exit() {
m_callback();
}
protected:
function<void()> m_callback;
};
/**
* Creates a wrapper that will trigger given callback when
* leaving the object's scope (i.e, when it gets destroyed)
*
* Example usage:
* @code cpp
* {
* auto handler = scope_util::make_exit_handler([]{ ... })
* ...
* }
* @endcode
*/
template <typename Fn = function<void()>, typename... Args>
decltype(auto) make_exit_handler(Fn&& fn, Args&&... args) {
2016-12-09 08:02:47 +00:00
return factory_util::unique<on_exit<Args...>>(forward<Fn>(fn), forward<Args>(args)...);
}
2016-06-15 03:32:35 +00:00
}
2016-11-19 05:22:44 +00:00
POLYBAR_NS_END