53 inline bool invoke(Collector &collector,
const std::function<R(Args...)> &cbf, Args... args)
const
55 return collector(cbf(args...));
62 inline bool invoke(Collector &collector,
const std::function<
void(Args...)> &cbf, Args... args)
const
70 template <
class Collector,
class R,
class... Args>
75 using Result =
typename CbFunction::result_type;
88 callback_list_.emplace_back(std::make_shared<CbFunction>(cb));
89 return size_t(callback_list_.back().get());
94 auto it = std::remove_if(begin(callback_list_), end(callback_list_),
96 bool const removed = it != end(callback_list_);
97 callback_list_.erase(it, end(callback_list_));
116 bool disconnect(
size_t connection) {
return remove_cb(connection); }
122 for (
auto &
slot : callback_list_)
126 const bool continue_emission = this->invoke(collector, *
slot, args...);
127 if (!continue_emission)
133 return collector.result();
136 std::size_t
size() {
return callback_list_.size(); }
156 template <typename SignalSignature, class Collector = Lib::CollectorDefault<typename std::function<SignalSignature>::result_type>>
166 template <
class instance,
class Class,
class R,
class... Args>
167 std::function<R(Args...)>
slot(instance &
object, R (Class::*method)(Args...))
169 return [&object, method](Args... args) {
return (
object.*method)(args...); };
173 template <
class Class,
class R,
class... Args> std::function<R(Args...)>
slot(Class *
object, R (Class::*method)(Args...))
175 return [object, method](Args... args) {
return (object->*method)(args...); };