template - static member exportieren
-
hallo
folgender code:
class idgenerator { public: static unsigned getid() { return ++id; } static unsigned id; }; template <class T> class object { public: static unsigned getid() { return id; } static unsigned id; }; unsigned idgenerator::id = 0; template <class T> unsigned object<T>::id = any::idgenerator::getid();ich möchte, dass jede verschiedene instanzierung der klasse
eine eigene ID bekommt. also obejct<int> hat 0 und object<float> hat 1allerdings gibt das linkerfehler bei mehreren dateien, wie kann ich das
so umschreiben, dass dasnur im header steht (DLL header)
von mehreren dateien inkludiert werden kannich weiß da echt nicht mehr weiter.
MfG templater
-
Muss es denn eine fortlaufende Nummer sein? Sonst mach doch sowas:
template<typename T> struct object { typedef T id; std::string getID() const { return typeid(id).name(); } };
-
Ich hab grad deinen Code kompiliert. Dein Problem lässt sich auch lösen, indem du die statische Membervariable idgenerator::id als lokale statische Variable in getid() definierst.
-
typeid wollte ich nicht verwenden, da das einen gewissen overhead hat.
danke dir Michael E. die idee mit dem statischen member funktioniert.ich habs jetzt so gelöst:
class idgenerator { public: static unsigned getid() { static unsigned id = 0; return ++id; } }; template <class T> class object { public: static unsigned getid() { static unsigned id = idgenerator::getid(); return id; } };