From c0c1f47926cb01ddcfe9ed6556af2623d462b770 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Sun, 8 Jul 2018 09:05:27 +0900 Subject: eventCast<>() --- lib/events/event.h | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) (limited to 'lib/events') diff --git a/lib/events/event.h b/lib/events/event.h index 5aa78dbb..b188a40b 100644 --- a/lib/events/event.h +++ b/lib/events/event.h @@ -273,20 +273,36 @@ namespace QMatrixClient #define DEFINE_EVENTTYPE_ALIAS(_Id, _Type) \ namespace EventType \ { \ - [[deprecated("Use typeId<>(), is<>() or visit<>()")]] \ + [[deprecated("Use is<>(), eventCast<>() or visit<>()")]] \ static const auto _Id = typeId<_Type>(); \ } \ // End of macro - // === is<>() and visit<>() === + // === is<>(), eventCast<>() and visit<>() === template inline bool is(const Event& e) { return e.type() == typeId(); } inline bool isUnknown(const Event& e) { return e.type() == unknownEventTypeId(); } - template - inline auto visit(const Event& event, FnT visitor, + template + inline Omittable eventCast(BaseEventT&& e) + { + if (is(e)) + return static_cast(e); + return none; + } + + template + inline EventT* eventCast(PtrT* eptr) + { + if (is(*eptr)) + return static_cast(eptr); + return {}; + } + + template + inline auto visit(const BaseEventT& event, FnT visitor, DefaultT&& defaultValue) -> std::enable_if_t< std::is_convertible>::value, -- cgit v1.2.3