1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- // 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
|