Template mit Zeigern



  • Hallo, ich möchte in meine Templateklasse auch Zeiger einfügen können. Also z.B. MyVector<int*>. Bin mir nicht sicher, aber dachte ich hätte etwas gelesen dass dies nicht ohne weiteres möglich ist.

    Templateklasse sieht in etwa so aus:

    #include <vector>
    
    template <typename T>
    class MyVector
    {
       private:
         vector<T> vec;
    
       public:
        ...
        template <typename T>
        void add(T t) // Wird hier dann auch ein Zeiger übergeben?
        {
           vec.push_back(t); // Erwartet aber eigentlich eine Referenz
        }
    }
    

    Danke im Voraus!



  • Es ist kein Problem, Zeiger als Templateargumente zu übergeben. Sofern nicht irgendeine Einschränkung (z.B. Spezialisierung) vorliegt, kannst du alle gültigen Objekttypen für T einsetzen. Je nachdem existieren bestimmte Anforderungen, wie z.B. Kopierbarkeit für STL-Container-Elemente.



  • VanishOxiAction schrieb:

    Hallo, ich möchte in meine Templateklasse auch Zeiger einfügen können. Also z.B. MyVector<int*>. Bin mir nicht sicher, aber dachte ich hätte etwas gelesen dass dies nicht ohne weiteres möglich ist.

    Templateklasse sieht in etwa so aus:

    #include <vector>
    
    template <typename T>
    class MyVector
    {
       private:
         vector<T> vec;
    
       public:
        ...
        template <typename T>
        void add(T t) // Wird hier dann auch ein Zeiger übergeben?
        {
           vec.push_back(t); // Erwartet aber eigentlich eine Referenz
        }
    }
    

    Danke im Voraus!

    Die Elementfunktion sollte selbst kein Template sein, sonst funktioniert der Code einwandfrei.

    Wird hier dann auch ein Zeiger übergeben?

    Sofern die Elementfunktion kein eigenes Template mehr besitzt, sondern das T vom Klassentemplate nimmt, dann ja. Sonst hängt es davon ab, was der User als (Template-)Parameter übergibt.

    Erwartet aber eigentlich eine Referenz

    Ja, eine Referenz auf T, also eine Referenz auf einen Zeiger. Das macht also keine Probleme.



  • Danke, ja ist eigentlich logisch... 😉


Anmelden zum Antworten