SingletonT.hh
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012 Open Source Robotics Foundation
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16*/
17/* Desc: Singleton base class
18 * Author: Nate Koenig
19 * Date: 2 Sept 2007
20 */
21
22#ifndef GAZEBO_COMMON_SINGLETONT_HH_
23#define GAZEBO_COMMON_SINGLETONT_HH_
24
25#include "gazebo/util/system.hh"
26
29
32template <class T>
34{
36 public: static T *Instance()
37 {
38 return &GetInstance();
39 }
40
42 protected: SingletonT() {}
43
45 protected: virtual ~SingletonT() {}
46
48 private: static T &GetInstance()
49 {
50 static T t;
51 return static_cast<T &>(t);
52 }
53};
54
56// clang doesn't compile if it explicitly specializes a type before
57// the type is defined. (forward declaration is not enough.)
58#define GZ_SINGLETON_DECLARE(visibility, n1, n2, singletonType)
59
61
62#endif
Singleton template class.
Definition SingletonT.hh:34
virtual ~SingletonT()
Destructor.
Definition SingletonT.hh:45
static T * Instance()
Get an instance of the singleton.
Definition SingletonT.hh:36
SingletonT()
Constructor.
Definition SingletonT.hh:42