X-Git-Url: http://git.tdb.fi/?p=libs%2Fcore.git;a=blobdiff_plain;f=source%2Fcore%2Fraii.h;h=6cb24a95dcb4f026a6dd68409dfee3b8c4f87b51;hp=fde7e3e9dde2e8f72635d63654d8857039951f49;hb=dd522da4782ec2dab70bc80f7edab89db0ad826b;hpb=b5c408c0ec353dda001db6fdacde5637fed45bee 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