Header-only Klasse, wo static Member initialisieren?
-
Hallo!
Eine allgemeine Stilfrage: Wenn eine Klasse nur im *.h-File implementiert ist (nur inline-Members), aber zusätzlich eine Variable 'static unsigned counter' Member dieser Klasse ist, wo würde man die dann definieren? Im *.h-File geht nicht, denn das würde beim Linken multiple definitions ergeben. Ich sehe nur zwei Möglichkeiten:
.) Ein extra *.cpp nur für diese eine Variable machen.
.) Die Variable in dem *.cpp-File definieren, wo das main() steht.Gibt es eine bessere Möglichkeit?
Danke, lg
-
dings schrieb:
Gibt es eine bessere Möglichkeit?
"Besser" nicht. Die Variable in einer eigenen cpp-Datein zu definieren ist am besten.
Man könnte auch noch so etwas machen:
#ifndef KLASSE_HEADER #define KLASSE_HEADER template<int Dummy> class myclass { static int blah; }; template<int Dummy> int myclass<Dummy>::blah = 0; typedef myclass<0> Klasse; #endifDie one-definition-rule macht für statische Elemente von Klassentemplates eine Ausnahme. Aber nur deswegen aus der Klasse ein Klassentemplate zu basteln ist IMHO blöd.
-
Noch eine Möglichkeit:
class foo { public: static int& bar(){static int interner_wert=0; return interner_wert;} };Die Methode ist zwar etwas ungewohnt in der Benutzung (weil man () nach dem "Variablen"-Namen schreiben muss)., dafür kann aber nichts mehr schief gehen bezüglich der Definition der Variablen.