| //===-- MIUtilSingletonBase.h -----------------------------------*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| //++ |
| // File: MIUtilSingletonBase.h |
| // |
| // Overview: MI::ISingleton interface. |
| // |
| // Environment: Compilers: Visual C++ 12. |
| // gcc (Ubuntu/Linaro 4.8.1-10ubuntu9) 4.8.1 |
| // Libraries: See MIReadmetxt. |
| // |
| // Copyright: None. |
| //-- |
| |
| #pragma once |
| |
| namespace MI |
| { |
| |
| // MI::ISingleton base class usage: |
| // |
| // class CMIDerivedClass |
| // : public MI::ISingleton< CMIDerivedClass > |
| // { |
| // friend MI::ISingleton< CMIDerivedClass >; |
| // |
| // // Overridden: |
| // public: |
| // // From MI::ISingleton |
| // virtual bool Initialize( void ); |
| // virtual bool Shutdown( void ); |
| // }; |
| |
| //++ ============================================================================ |
| // Details: Base class for the singleton pattern. |
| // Gotchas: Derived class must specify MI::ISingleton<> as a friend class. |
| // Authors: Aidan Dodds 17/03/2014. |
| // Changes: None. |
| //-- |
| template< typename T > |
| class ISingleton |
| { |
| // Statics: |
| public: |
| // Return an instance of the derived class |
| static T & Instance( void ) |
| { |
| // This will fail if the derived class has not |
| // declared itself to be a friend of MI::ISingleton |
| static T instance; |
| |
| return instance; |
| } |
| |
| // Overrideable: |
| public: |
| virtual bool Initialize( void ) = 0; |
| virtual bool Shutdown( void ) = 0; |
| // |
| /* dtor */ virtual ~ISingleton( void ) { }; |
| }; |
| |
| } // namespace MI |