aboutsummaryrefslogtreecommitdiff
path: root/src/singleton.h
blob: c69e6f10501ecc63e07497c5e7c0769144cec57e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#ifndef SINGLETON_H
#define SINGLETON_H

#include <stdio.h>

/**
 * Provides singleton functionality in a modular sort of way.  Make this the
 * base class of any other class and you immediately gain singleton
 * functionality.  Be sure to make your constructor and various functions use
 * intellegent scoping.  Cleanup and instantiation are performed automatically
 * for you at first use and program exit.  There are two things that you must
 * do when using this template, first is to inherit from it with the name of
 * your class filling in for T and then make this class a friend of your class.
 *@code
 * // Making the Single Singleton:
 * class Single : public Singleton<Single>
 * {
 * 		friend class Singleton<Single>;
 * 	protected:
 * 		Single();
 * 		...
 * };
 @endcode
 * You can still add public functions and variables to your new Singleton child
 * class, but your constructor should be protected (hence the need for the
 * friend decleration).
 *@author Mike Buland
 */
template <class T>
class Singleton
{
protected:
	Singleton() {};

private:
	Singleton( const Singleton& );

public:
	static T &getInstance()
	{
		static T i;
		return i;
	}
};

#endif