1 /* singleton.h */ 2 3 /* Copyright (C) 2011-2020 Michael Lugmair (Lucio Carreras) 4 * 5 * This file is part of sayonara player 6 * 7 * This program is free software: you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation, either version 3 of the License, or 10 * (at your option) any later version. 11 12 * This program is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 17 * You should have received a copy of the GNU General Public License 18 * along with this program. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21 #pragma once 22 #ifndef SAYONARA_SINGLETON_H 23 #define SAYONARA_SINGLETON_H 24 25 #define _SINGLETON_BASIC_(class_name) friend class Application; \ 26 protected: \ 27 class_name( const class_name& other ) = delete; \ 28 class_name& operator=(const class_name& other) = delete; \ 29 class_name( const class_name&& other ) = delete; \ 30 class_name& operator=(const class_name&& other) = delete; \ 31 public: \ 32 static class_name *instance() \ 33 { static class_name instance; return &instance; } \ 34 virtual ~class_name (); 35 36 #define SINGLETON(class_name) _SINGLETON_BASIC_(class_name) \ 37 protected: \ 38 class_name(); \ 39 private: 40 41 #define SINGLETON_QOBJECT(class_name) _SINGLETON_BASIC_(class_name) \ 42 protected: \ 43 class_name(QObject* parent=nullptr); \ 44 private: 45 46 47 #endif // SAYONARA_SINGLETON_H 48