From 429c0151db1db7540acef256169b65f4f33a2c7f Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Tue, 27 Mar 2018 16:15:54 +1100 Subject: [PATCH] singleton: add comments --- singleton.hpp | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/singleton.hpp b/singleton.hpp index bc7a6348..5cabfbaf 100644 --- a/singleton.hpp +++ b/singleton.hpp @@ -23,6 +23,11 @@ namespace util { + /// statically stores a single value of the named type. + /// + /// this does not prevent the instantiation of the named type, but + /// instead defines a method to refer to a single instance across an + /// application. template class singleton { private: @@ -31,6 +36,15 @@ namespace util { static SelfT *instance; public: + /// instantiates the one blessed value of this type. + /// + /// `instantiate` must be called once and once only before any calls + /// to `get`. it is not threadsafe. there are some (unsafe) + /// assertions against multiple instantiations but they may not be + /// relied upon. + /// + /// returns a unique_ptr to the value which the caller must store + /// until it will never be needed again. template static std::unique_ptr instantiate [[nodiscard]] (Args &&...args) @@ -43,9 +57,13 @@ namespace util { } + /// returns a reference to sole instantiated value + /// + /// `instantiate` must have already been called before `get` is called. static SelfT& get (void) { + CHECK (instance); return *instance; } };