From 6b9a364a91517641f4745d6e4faa3f82a2b80e91 Mon Sep 17 00:00:00 2001 From: Jamie Reece Wilson Date: Tue, 30 Jul 2024 01:51:20 +0100 Subject: [PATCH] [+] C#-like using with RAII semantics. Use: AU_USING(pPointer/ref, MethodName) --- Include/auROXTL/AU_MACROS.hpp | 2 ++ Include/auROXTL/AU_USING.hpp | 39 +++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 Include/auROXTL/AU_USING.hpp diff --git a/Include/auROXTL/AU_MACROS.hpp b/Include/auROXTL/AU_MACROS.hpp index bc69691..2ea227e 100644 --- a/Include/auROXTL/AU_MACROS.hpp +++ b/Include/auROXTL/AU_MACROS.hpp @@ -289,3 +289,5 @@ struct AuStringOwnedException : AuStringException #define AU_EMIT_FIRST_COMMA_OTHERS(n),n #include "Objects/Objects.hpp" + +#include "AU_USING.hpp" \ No newline at end of file diff --git a/Include/auROXTL/AU_USING.hpp b/Include/auROXTL/AU_USING.hpp new file mode 100644 index 0000000..f2cd939 --- /dev/null +++ b/Include/auROXTL/AU_USING.hpp @@ -0,0 +1,39 @@ +/*** + Copyright (C) 2024 Jamie Reece Wilson (a/k/a "Reece"). All rights reserved. + + File: AU_USING.hpp + Date: 2024-07-30 + Author: Reece +***/ +#pragma once + +namespace __audetail +{ + template + struct __au_using + { + T_t *pThat; + using CB_t = void (T_t:: *)(); + CB_t cb; + + __au_using(T_t &that, CB_t cb) : + cb(cb), + pThat(&that) + { } + + __au_using(T_t *that, CB_t cb) : + cb(cb), + pThat(that) + { } + + ~__au_using() + { + ((pThat)->*(cb))(); + } + }; +} + +#define AU_USING(pPointer, method) \ + __audetail::__au_using>> AU_CONCAT(__stack_using, __COUNTER__)( \ + pPointer, \ + &AuRemovePointer_t>::method); \ No newline at end of file