| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- // Copyright (C) 2001-2003
- // Mac Murrett
- //
- // Distributed under the Boost Software License, Version 1.0. (See
- // accompanying file LICENSE_1_0.txt or copy at
- // http://www.boost.org/LICENSE_1_0.txt)
- //
- // See http://www.boost.org for most recent version including documentation.
- #ifndef BOOST_SINGLETON_MJM012402_HPP
- #define BOOST_SINGLETON_MJM012402_HPP
- #include <boost/thread/detail/config.hpp>
- namespace boost {
- namespace detail {
- namespace thread {
- // class singleton has the same goal as all singletons: create one instance of
- // a class on demand, then dish it out as requested.
- template <class T>
- class singleton : private T
- {
- private:
- singleton();
- ~singleton();
- public:
- static T &instance();
- };
- template <class T>
- inline singleton<T>::singleton()
- {
- /* no-op */
- }
- template <class T>
- inline singleton<T>::~singleton()
- {
- /* no-op */
- }
- template <class T>
- /*static*/ T &singleton<T>::instance()
- {
- // function-local static to force this to work correctly at static
- // initialization time.
- static singleton<T> s_oT;
- return(s_oT);
- }
- } // namespace thread
- } // namespace detail
- } // namespace boost
- #endif // BOOST_SINGLETON_MJM012402_HPP
|