Du bist nicht angemeldet.

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

Anonymous

unregistriert

11

24.08.2005, 22:40

Dir ist schon bewusst, dass für jede Instanzierung einer Template-Klasse eine komplett eigenständige Version der Klasse entsteht und du somit von überall auf eine ganz bestimmte Version zugreifen kannst?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
template< typename T >
class Singleton
{
  private:
    Singleton(){}
    Singleton( const Singleton& ){}
    const Singleton& operator=( const Singleton& ){}
  public:
    Singleton& getSingleton(){ static T instance; return instance }
};

// Dann halt normal davon erben und Zugriff wäre zB so:


Singleton< CEffectManager >::getSingleton()

Anonymous

unregistriert

12

24.08.2005, 22:46

Hab da ne Kleinigkeit vergessen, so ist es richtig:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
template< typename T >
class Singleton
{
protected:
    Singleton(){}
    Singleton( const Singleton& ){}
    const Singleton& operator=( const Singleton& ){}
public:
    static T& getSingleton(){ static T instance; return instance; }
};

// Dann halt normal davon erben und Zugriff wäre zB so:


Singleton< CEffectManager >::getSingleton().print();

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

13

24.08.2005, 22:53

ja na klar, das ist auch absicht, wie du unten in meinem code siehst werden ja 2 verschiedene versionen des managers abgeleitet... mit dem singleton alleine komme ich nicht weiter, weil ich dann den singleton hätte dann die template manager klasse und dann nochmal die beiden andern klassen ableiten müsste das wäre mir zu umständlich

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

14

25.08.2005, 00:08

Das hat jetzt mit dem eigentlichen Problem nix zu tun, aber Du vergleichst in der Methode "GetEntry" zwei char-Pointer miteinander. Sollte es da nicht besser mit strcmp gemacht werden, da Du ja in der Methode "InsertEntry" die Zeichenkette mit strcpy initialisierst und nicht einfach nur den Pointer des "Quellstrings" übernimmst...

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

15

25.08.2005, 00:12

ah supi, das ist noch aus den alten visual basic zeiten ;) hätte ich jetzt glatt übersehen, danke

Anonymous

unregistriert

16

25.08.2005, 00:21

Was heißt zu umständlich? In C++ muss man manchmal von mehreren Klassen ableiten, da es keine interfaces gibt.
Das Singleton als Basisklasse ist ja nur nen Trick um das ständige neuschreiben zu vermeiden, das kannste durch nen einfaches Makro auch erreichen und der Rest liegt ja ganz an deinem Design.

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

17

25.08.2005, 07:01

ist richtig, aber ich denke (kann mich auch täuschen noch nicht getestet) das die Lösung die ich jetzt habe eigentlich für meine Situation völlig ausreichend ist.

Anonymous

unregistriert

18

25.08.2005, 12:17

Was meinst du denn mit deiner derzeitigen Lösung? Alles statisch zu machen?

rewb0rn

Supermoderator

  • »rewb0rn« ist der Autor dieses Themas

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

19

25.08.2005, 12:55

Nein, meine derzeitige Lösung ist der Quellcode, den ich gepostet habe.

Dave

Alter Hase

Beiträge: 757

Wohnort: Berlin

  • Private Nachricht senden

20

25.08.2005, 12:58

Zitat von »"Patrick"«


Na, da ist ein etwas größerer Unterschied schon da. Das was ihr macht ist eigentlich eine vergewaltigung einer Klasse und sollte wenn mit namespaces gehandhabt werden.

Gegen eine Statische Klasse sagt keiner was, aber gegen die statischen Funktionen, die sind gegen eine Statische Klasse oft unberechenbar.

Man sollte es einfach sein lassen. Nimm Dir den Meyers Singleton aus Effective C++ Programming und fertig :)


also geht soetwas in c++?

C-/C++-Quelltext

1
2
3
4
5
6
static class StatischeKlasse
{

}

StatischeKlasse::MeineFunktion();


dachte immer das wäre erst mit c# gekommen. und was ist dann der unterschied ob man es mit nem singleton oder ner echten statischen klasse macht?

was meinst du genau mit:

Zitat


Gegen eine Statische Klasse sagt keiner was, aber gegen die statischen Funktionen, die sind gegen eine Statische Klasse oft unberechenbar.


warum sind die funktionen oft unberechenbar?

Werbeanzeige