singleton
-
bedeutet singleton dass, "ich hätte auch die funktionen und variablen in ein namespace packen können, aber ich wollte unbedingt, dass da 'class' steht"

-
nein, singleton bedeutet, "ich will eine klasse, von der zur laufzeit genau eine instanz existiert."
namespaces bieten keine kapselung, sind also nicht mit singleton classes zu vergleichen.
-
-
Ähm.
Im Allgemeinen kann man was man mit einem Singleton machen kann oft auch über einen Namespace mit öffentlichen Funktionen/Daten + nameless Namespace mit privaten Funktionen/Daten im .cpp File machen. Bzw. das meiste.Gewisse Dinge gehen natürlich nicht wenn keine Klasse mehr da ist, wie ableiten oder einen Zeiger auf die Instanz an irgendwelche Programmteile übergeben (die u.U. garnichts davon wissen dass die Klasse ein Singleton ist).
-
Versuch mal, einen Konstruktor für nen Namespace zu definieren...

Grüße,
Martin
-
JimmydaMage schrieb:
Versuch mal, einen Konstruktor für nen Namespace zu definieren...

irgendwo: class MyPrivateConstructorClass { public: MyPrivateConstructorClass( void(*constr)(void)) { constr(); } }; h: namespace Kraks { extern int daten; } cpp: namespace Kraks { int daten; } void KraksConstructor() { Kraks::daten = 0xC0|157|2|0xC70|2; // wer das Wort dahinter errät bekommt nen Keks :D } namespace { MyPrivateConstructorClass c( KraksConstructor ); }Ist zwar ein halbherziger Workaround aber funktioniert :p
-
Cleanup Code kann man mit atexit() laufen lassen...