Compare commits
1 Commits
Release-12
...
Release-12
Author | SHA1 | Date | |
---|---|---|---|
fd15df57ed |
@@ -39,6 +39,14 @@ public:
|
|||||||
Connection Connect(delegate callback);
|
Connection Connect(delegate callback);
|
||||||
void Disconnect(Connection &conn);
|
void Disconnect(Connection &conn);
|
||||||
Connection operator+=(delegate callback);
|
Connection operator+=(delegate callback);
|
||||||
|
|
||||||
|
/// Also support binding callbacks that don't read in arguments, as a shorthand.
|
||||||
|
// TODO: No need to wrap the callback if the template args type is void.
|
||||||
|
Connection Connect(const std::function<void()>& default_callback);
|
||||||
|
/// Also support binding callbacks that don't read in arguments, as a shorthand.
|
||||||
|
// TODO: No need to wrap the callback if the template args type is void.
|
||||||
|
Connection operator += (const std::function<void()>& default_callback);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::vector<EventPtr> listeners;
|
std::vector<EventPtr> listeners;
|
||||||
};
|
};
|
||||||
@@ -62,6 +70,19 @@ bool BasicEvent<delegate, Args...>::Connection::Disconnect() {
|
|||||||
template<typename delegate, typename... Args>
|
template<typename delegate, typename... Args>
|
||||||
BasicEvent<delegate, Args...>::Connection BasicEvent<delegate, Args...>::operator+=(delegate callback) { return Connect(callback); }
|
BasicEvent<delegate, Args...>::Connection BasicEvent<delegate, Args...>::operator+=(delegate callback) { return Connect(callback); }
|
||||||
|
|
||||||
|
template<typename delegate, typename ... Args>
|
||||||
|
typename BasicEvent<delegate, Args...>::Connection BasicEvent<delegate, Args...>::Connect(
|
||||||
|
const std::function<void()> &default_callback) {
|
||||||
|
delegate wrapper = [default_callback] (Args... args) { default_callback(); };
|
||||||
|
return Connect(wrapper);
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename delegate, typename ... Args>
|
||||||
|
typename BasicEvent<delegate, Args...>::Connection BasicEvent<delegate, Args...>::operator+=(
|
||||||
|
const std::function<void()> &default_callback) {
|
||||||
|
return Connect(default_callback);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename delegate, typename... Args>
|
template<typename delegate, typename... Args>
|
||||||
void BasicEvent<delegate, Args...>::operator()(Args... args) { Invoke(args...); }
|
void BasicEvent<delegate, Args...>::operator()(Args... args) { Invoke(args...); }
|
||||||
|
|
||||||
|
4
main.cpp
4
main.cpp
@@ -24,6 +24,10 @@ int main() {
|
|||||||
};
|
};
|
||||||
auto handler2 = OnMessage += ProcessMessage;
|
auto handler2 = OnMessage += ProcessMessage;
|
||||||
|
|
||||||
|
auto handler3 = OnMessage += [&] {
|
||||||
|
std::cout << "Connect to event, with default callback, if we don't care about using the provided arguments." << std::endl;
|
||||||
|
};
|
||||||
|
|
||||||
while (run)
|
while (run)
|
||||||
{
|
{
|
||||||
std::string input;
|
std::string input;
|
||||||
|
Reference in New Issue
Block a user