Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
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 TSINGLETON #define TSINGLETON template <class T> class TSingleton { protected: static T *theInstance; virtual ~TSingleton () {} public: // Memberfunktionen inline static T* Get () { if (!theInstance) theInstance = new T; return (theInstance); } static void Del () { if (theInstance) { delete (theInstance); theInstance = NULL; } } }; template <class T> T* TSingleton<T>::theInstance = 0; #endif |
C-/C++-Quelltext |
|
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 |
#include <iostream> #include "TSingleton.hpp" using namespace std; #define thePlayer CPlayer::Get() class CPlayer : public TSingleton<CPlayer> { private: int m_PosX, m_PosY; int m_LifePoints; CPlayer (); ~CPlayer (); public: int getLifePoints(); void setValues(); void outValues(); } int CPlayer::getLifePoints () { return m_LifePoints; } void CPlayer::setValues() { m_LifePoints = 100; m_PosX = 0; m_PosY = 0; } void CPlayer::outValues() { cout << "Lebenspunkte: " << m_LifePoints << endl; cout << "Position: " << m_PosX << ", " << m_PosY<< endl; } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 |
#include <iostream> #include "CPlayer.hpp" int main() { thePlayer->setValues(); //thePlayer->outValues(); //CPlayer::Del(); return 0; } |
Quellcode |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
1>------ Erstellen gestartet: Projekt: TextAdventure, Konfiguration: Debug Win32 ------ 1> Main.cpp 1>MeinPfad\textadventure\main.cpp(4): error C2628: 'CPlayer' gefolgt von 'int' unzulässig (Semikolon ';' vergessen?) 1>MeinPfad\textadventure\main.cpp(4): error C3874: Der Rückgabetyp von "main" sollte "int" und nicht "CPlayer" sein 1>MeinPfad\textadventure\main.cpp(9): error C2664: 'CPlayer::CPlayer(const CPlayer &)': Konvertierung des Parameters 1 von 'int' in 'const CPlayer &' nicht möglich 1> Ursache: Konvertierung von 'int' in 'const CPlayer' nicht möglich 1> Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Überladungsauflösung des Konstruktors ist mehrdeutig 1> CPlayer.cpp 1>MeinPfad\textadventure\cplayer.cpp(12): error C2628: 'CPlayer' gefolgt von 'int' unzulässig (Semikolon ';' vergessen?) 1>MeinPfad\textadventure\cplayer.cpp(12): error C2556: 'CPlayer CPlayer::getLifePoints(void)': Überladene Funktion unterscheidet sich nur hinsichtlich des Rückgabetyps von 'int CPlayer::getLifePoints(void)' 1> MeinPfad\textadventure\cplayer.hpp(23): Siehe Deklaration von 'CPlayer::getLifePoints' 1>MeinPfad\textadventure\cplayer.cpp(12): error C2371: 'CPlayer::getLifePoints': Neudefinition; unterschiedliche Basistypen 1> MeinPfad\textadventure\cplayer.hpp(23): Siehe Deklaration von 'CPlayer::getLifePoints' 1> Code wird generiert... ========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ========== |
Community-Fossil
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Community-Fossil
Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer
Praktisch relevant wird es dann wenn es um Ausgaben in Dateien geht (Verhinderung von mehrfachen Zugriffen, Stichwort: synchronized) und klassisch bei Druckaufträgen.
Community-Fossil
Ein Singleton kann uU. schon recht sinnvoll sein. Also "Benutze niemals Singleton!" kann ich so nicht unterschreiben.
Alter Hase
Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy
Werbeanzeige