blob: 26fdff87ccbf7657bf9ee4ac3abf355b7bd10dd2 [file] [log] [blame]
#pragma once
#include <memory>
template<typename T>
std::function<void()> makeSafeCallback(T *obj, std::function<void(T *)> f) {
auto weak_me = std::weak_ptr<T>(obj->shared_from_this());
return [f, weak_me]{
auto me = weak_me.lock();
if (me) {
f(me.get());
}
};
}
template<typename T, typename... Params>
std::function<void()> makeSafeCallback(
T *obj, void (T::*f)(const Params&...), const Params&... params) {
return makeSafeCallback<T>(
obj,
[f, params...](T *me) {
(me->*f)(params...);
});
}
template<typename T, typename... Params>
std::function<void()> makeSafeCallback(
T *obj, void (T::*f)(Params...), const Params&... params) {
return makeSafeCallback<T>(
obj,
[f, params...](T *me) {
(me->*f)(params...);
});
}