Klassentemplate: Attribut -> generisches Feld



  • Also ich hab eigentlich meiner Meinung nach schon ein guten Ansatz:

    template <typename T, int Groesse>
    class Array
    {
      private:
        T objekte[Groesse];
    
      public:
        Array();
    };
    
    int main(){
    
    //  int o={1,2,3,4,5,6,7,8,9,10};
    
    Array<int,10> meinArray;
    
    }
    

    Diesen code in etwa habe ich bei wikibooks gefunden und der passt eigentlich auch ganz gut zu meiner Aufgabe.
    Die Frage ist jetzt aber wie ich mein array "int o[]" in den Klassenaufruf implementiere. Außerdem stellt sich mir die Frage wie ich den Konstruktor umändern muss.

    Meine Version hat auf jedenfall nicht geklappt:

    template <typename T, int Groesse>
    class Array
    {
      private:
        T objekte[Groesse];
    
      public:
        Array(T *p):objekte(p){};
    };
    
    int main(){
    
    int o={1,2,3,4,5,6,7,8,9,10};
    
    Array<int,10> meinArray(o);
    }
    

    Unter der Forum suche habe ich auf jeden fall dementsprechend keine Lösung gefunden.
    Vieleicht hat ja jemand von euch nen Tip 🙂


  • Mod

    Da musst du dir einen passenden Konstruktor schreiben, der alle Einträge kopiert. Stichwort: Deep Copy.

    Das kann dann als ganz einfaches Beispiel so aussehen:

    template <typename T, int Groesse>
    class Array
    {
      private:
        T objekte[Groesse];
    
      public:
        Array(T *p){
          for(int i=0; i<Groesse; ++i) objekte[i]=p[i];
        };
    };
    
    int main(){
    
    int o[10]={1,2,3,4,5,6,7,8,9,10};
    
    Array<int,10> meinArray(o);
    }
    


  • Super 🙂 Dankeschön. Ich mein wenn mans jetzt so sieht hätte man auch selber drauf kommen können ^^



  • Willst du das benutzen oder machst du es zur Übung?
    Kannst ja mal bei boost::array bzw. tr1::array abgucken 😉


Anmelden zum Antworten