X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fbindable.h;h=bde5e85a11752b3a95a07de5187ad174b3c4a50a;hb=27fe0982fc18d1f5f9efe942e18c42f508268f34;hp=76c2fb528b7967839fa606a6c8a076ce190ee525;hpb=904de4f7fd994886adbd3a6c03bc1b7c14ebc562;p=libs%2Fgl.git diff --git a/source/bindable.h b/source/bindable.h index 76c2fb52..bde5e85a 100644 --- a/source/bindable.h +++ b/source/bindable.h @@ -33,6 +33,36 @@ template const T *Bindable::cur_obj; +/** +A helper class for Bindables that revert to a default object on unbind. +*/ +template +class BindableWithDefault: protected Bindable +{ +protected: + BindableWithDefault() { } + +public: + static const T *current() + { + if(!Bindable::cur_obj) + Bindable::cur_obj = &default_object(); + return Bindable::cur_obj; + } + + static void unbind() + { + default_object().bind(); + } + + static const T &default_object() + { + static T obj; + return obj; + } +}; + + /** RAII class for binding things. Binds the thing upon construction and unbinds it upon destruction. If a null pointer is given, unbinds upon construction and