LkEngine 0.1.2
 
Loading...
Searching...
No Matches
DelegateFwd.h
1/******************************************************************
2 * DelegateFwd
3 *
4 * Forward declarations and macro definitions.
5 *
6 * - LK_DECLARE_DELEGATE
7 * - LK_DECLARE_MULTICAST_DELEGATE
8 * - LK_DECLARE_DELEGATE_RET
9 * - LK_DECLARE_EVENT
10 *
11 *******************************************************************/
12#pragma once
13
14#define LK_DECLARE_DELEGATE(DelegateName, ...) \
15 using DelegateName = ::LkEngine::Core::LDelegate<#DelegateName, void __VA_OPT__(,__VA_ARGS__)>
16
17#define LK_DECLARE_DELEGATE_RET(DelegateName, ReturnValue, ...) \
18 using DelegateName = ::LkEngine::Core::LDelegate<#DelegateName, ReturnValue __VA_OPT__(,__VA_ARGS__)>
19
20#define LK_DECLARE_MULTICAST_DELEGATE(DelegateName, ...) \
21 using DelegateName = ::LkEngine::Core::LMulticastDelegate<__VA_ARGS__>; \
22 using DelegateName ## _DelegateType = ::LkEngine::Core::LMulticastDelegate<__VA_ARGS__>::TDelegate
23
24#define LK_DECLARE_EVENT(EventName, TOwner, ...) \
25 class EventName : public ::LkEngine::Core::LMulticastDelegate<__VA_ARGS__> \
26 { \
27 private: \
28 friend class TOwner; \
29 using ::LkEngine::Core::LMulticastDelegate::Broadcast; \
30 using ::LkEngine::Core::LMulticastDelegate::RemoveAll; \
31 using ::LkEngine::Core::LMulticastDelegate::Remove; \
32 };