Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

Singleton.h

Go to the documentation of this file.
00001 // Copyright NVIDIA Corporation 2002-2004
00002 // TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED
00003 // *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS
00004 // OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY
00005 // AND FITNESS FOR A PARTICULAR PURPOSE.  IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS
00006 // BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES
00007 // WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS,
00008 // BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS)
00009 // ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF NVIDIA HAS
00010 // BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES 
00011 
00012 #pragma once
00013 
00015 #include "nvsg/nvsgapi.h"  // storage-class defines
00016 
00017 namespace nvutil {
00018 
00020 
00022 template <typename T>
00023 class Singleton
00024 {
00025 public:
00027 
00029   static T* instance();
00030 
00031 private:
00032   // not permitted 
00033   // client must call Singleton<T>::instance() for instantiation
00034   Singleton() {}
00035   Singleton(const Singleton<T>&) {}
00036   ~Singleton() {}
00037   // also not permitted
00038   Singleton<T>& operator=(const Singleton<T>&) {}
00039 
00040 private:
00041   static NVSG_API T m_instance; 
00042 };
00043 
00044 template <typename T>
00045 inline T* Singleton<T>::instance()
00046 {
00047   return &m_instance;
00048 };
00049 
00050 } // namespace nvutil

Generated on Tue Mar 1 13:19:20 2005 for NVSGSDK by NVIDIA