From dd522da4782ec2dab70bc80f7edab89db0ad826b Mon Sep 17 00:00:00 2001 From: Mikko Rasa Date: Fri, 28 Oct 2016 14:24:40 +0300 Subject: [PATCH] Add a construct to create conditional RAII objects --- source/core/raii.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/source/core/raii.h b/source/core/raii.h index fde7e3e..6cb24a9 100644 --- a/source/core/raii.h +++ b/source/core/raii.h @@ -25,6 +25,24 @@ public: SetFlag(bool &r, bool v = true): SetForScope(r, v) { } }; + +template +class Conditional +{ +private: + char buf[sizeof(T)]; + T *obj; + +public: + template + Conditional(bool c, const A &a): obj(c ? new(buf) T(a) : 0) { } + + template + Conditional(bool c, const A0 &a0, const A1 &a1): obj(c ? new(buf) T(a0, a1) : 0) { } + + ~Conditional() { if(obj) obj->~T(); } +}; + } // namespace Msp #endif -- 2.43.0