templates



  • class Bubble_Sort
    {
    public:
    
    template<typename T>
    	Bubble_Sort(T array);
    	~Bubble_Sort(void);
    
    private:
    
    	template<typename T>  //<--- genau hier
    	T  m_array;
    };
    

    h:\C++Projekte\Sortieralgorithmen\Bubble_Sort.h(15) : error C3856: 'Bubble_Sort': Klasse ist keine Klassenvorlage

    was mach ich nun falsch?



  • Aus der Klasse eine Klassenvorglage machen? 😃 Sprich mach aus der Klasse ein Klassentemplate. Wieviel Hinweise soll dir der Compiler noch geben?

    template<typename T>
    class Bubble_Sort
    {
    public:
        Bubble_Sort(T array);
        ~Bubble_Sort(void);
    
    private:
        T  m_array;
    };
    


  • template<class T>
    class Bubble_Sort 
    { 
    public: 
        Bubble_Sort(T array); 
        ~Bubble_Sort(void); 
    
    private: 
        T  m_array; 
    };
    

    das template<> gehört immer unmittelbar vor die klassendeklaration. außerdem muß in template<> vor dem parameter class und nicht typename stehen.

    man kann das template<> aber auch vor eine elementfunktion der klasse setzten. sowas nennt sich dann member-template und ist noch ein bißchen komplizierter als normale templates 😉

    anstelle von class kann man vor einen template-parameter auch int oder einen beliebigen anderen einfachen datentyp stellen. der template-parameter ist dann kein datentyp sondern eine konstante. ZB:

    template<class T, int SIZE=16>
    class Bubble_Sort 
    { 
    public: 
        Bubble_Sort(T array); 
        ~Bubble_Sort(void); 
    
    private: 
        T  m_array[SIZE]; 
    };
    
    Bubble_Sort<int>    a;  // SIZE ist hier gleich 16
    Bubble_Sort<int,32> b;
    


  • Konfusius schrieb:

    [...] außerdem muß in template<> vor dem parameter class und nicht typename stehen. [...]

    Ne typename geht auch.

    Gruß



  • Yo, class oder typename ist dem Compiler schnuppe. Wie Bjarne Stroustrup sagt: "Schreibfaule bevorzugen class anstatt typename." 😉


Anmelden zum Antworten