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 1

    allerdings gibt das linkerfehler bei mehreren dateien, wie kann ich das
    so umschreiben, dass das

    nur im header steht (DLL header)
    von mehreren dateien inkludiert werden kann

    ich 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;
    	}
    };
    

Anmelden zum Antworten