singleton: add comments
This commit is contained in:
parent
473556f9ed
commit
429c0151db
@ -23,6 +23,11 @@
|
|||||||
|
|
||||||
|
|
||||||
namespace util {
|
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 <typename SelfT>
|
template <typename SelfT>
|
||||||
class singleton {
|
class singleton {
|
||||||
private:
|
private:
|
||||||
@ -31,6 +36,15 @@ namespace util {
|
|||||||
static SelfT *instance;
|
static SelfT *instance;
|
||||||
|
|
||||||
public:
|
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 <typename ...Args>
|
template <typename ...Args>
|
||||||
static std::unique_ptr<SelfT>
|
static std::unique_ptr<SelfT>
|
||||||
instantiate [[nodiscard]] (Args &&...args)
|
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&
|
static SelfT&
|
||||||
get (void)
|
get (void)
|
||||||
{
|
{
|
||||||
|
CHECK (instance);
|
||||||
return *instance;
|
return *instance;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user