From d9d83f00cd461007e22f1c3f4215934854a9f6d6 Mon Sep 17 00:00:00 2001 From: Reece Date: Sun, 24 Oct 2021 13:29:03 +0100 Subject: [PATCH] [+] Made AuiFunction a customer overloadable type. Solves #1 --- Include/AuroraInterfaces.hpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/Include/AuroraInterfaces.hpp b/Include/AuroraInterfaces.hpp index 52e9591..877b2d2 100644 --- a/Include/AuroraInterfaces.hpp +++ b/Include/AuroraInterfaces.hpp @@ -10,6 +10,19 @@ ***/ #pragma once +#if defined(AURORA_RUNTIME_AU_FUNC) + template + using AuiFunction = AURORA_RUNTIME_AU_FUNC; +#elif defined(AUI_FUNC) + template + using AuiFunction = AUI_FUNC; +#else + #include + + template + using AuiFunction = std::function; +#endif + #define AUI_BRACKET_SCOPE(...) __VA_ARGS__ #define AUI_EXPAND_PARAMS_JOINER_A(a, b) a b @@ -27,14 +40,14 @@ #define AUI_METHOD_IMPL(ret, name, params) virtual ret name(AUI_EXPAND_PARAMS params) = 0; #define AUI_METHOD_FUNCTIONAL_IMPL(ret, name, params) \ - AuFunction name ## Functional; \ + name ## _t name ## Functional; \ virtual ret name (AUI_EXPAND_PARAMS params) override \ { \ return name ## Functional(AUI_EXPAND_PARAMS_PARAMS params); \ } #define AUI_METHOD_FUNCTIONAL_TYPEDEF(ret, name, params) \ - using name ## _t = AuFunction; + using name ## _t = AuiFunction; #define AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL(ret, name, params) \ name ## _t name ## Functional @@ -43,7 +56,7 @@ const name ## _t &name ## Functional #define AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_REF(ret, name, params) \ - AuFunction && name ## Functional + name ## _t && name ## Functional #define AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_A(ret, name, params) AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_CREF(ret, name, params) #define AUI_METHOD_FUNCTIONAL_CTOR_PARAMS_BASE_B(ret, name, params) , AUI_METHOD_PROTOTYPE_TO_FUNCTIONAL_CREF(ret, name, params)