C++ Vector als Template



  • Moin!

    Kann mir JEmand helfen, wie ich einen Vektor als Template (kann verschiedene Datentypen "annehmen") erzeugen kann?

    Innherhalb einer Klasse und in einer Funbktion.

    Danke



  • struct foo{
        std::vector<int> innerhalb_einer_klasse;
    };
    
    void f(){
        std::vector<float> innerhalb_einer_funktion;
    }
    


  • Einem std::vector<T> übergibt man den gewünschten Typen als Template-Argument ( T ), z.B. std::vector<int> v; . Das ist sehr grundlegend, daher empfehle ich dir dich mal ein wenig in C++-Templates einzulesen. Sowas dürfte direkt in der Einführung stehen.
    Wenn du einen eigenen Vector-Typen mit Templates bauen möchtest, dann solltest du nicht nur die Einführung lesen, sondern auch noch ein Kapitel weiter. Wenn du dann noch konkrete Fragen zu konkreten Problemen hast, wirst du hier im forum sicher Rat finden 😉

    Finnegan



  • Danke Für die Antworten!

    Wenn ich folgenden Code haben, bekomme ich eine Fehlermeldung.

    Ich wollte gerne den Vector für verschiedene Typen haben.

    #include "header.h"
    
    template <typename T1>;
    
    class gauss{
    
    	public:
    
    		gauss();
    		~gauss();
    		void man();
    		void aut();
    
    	protected:
    
    	private:
    
    		std::vector<T1> vec;
    		unsigned int n;
    		unsigned int m;
    		void calculation();
    
    };
    

    Danke



  • Ja, da ist ein Strichpunkt zu viel.



  • interpretiert schrieb:

    Ja, da ist ein Strichpunkt zu viel.

    Manchmal komme ich mir vor, wie auf Alkohol 🤡

    Jetzt mal für Template-Anfänger diese Fehlermeldung?

    Welche Parameter habe ich diesmal vergessen?

    [Error] invalid use of template-name 'gauss' without an argument list
    


  • Warnung: Templates werden nicht in .h und .cpp aufgeteilt.



  • manni66 schrieb:

    Warnung: Templates werden nicht in .h und .cpp aufgeteilt.

    Werden größere Projekte nicht in h /cpp Dateien aufgeteilt ?

    Ist es nicht alleine wegen der Übersicht ein Pro Argument dafür?



  • NoName123 schrieb:

    Jetzt mal für Template-Anfänger diese Fehlermeldung?

    Welche Parameter habe ich diesmal vergessen?

    [Error] invalid use of template-name 'gauss' without an argument list
    
    gauss<int> g ;
    


  • Danke für die Antwort.

    Wie muss ich es Umschreiben, wenn ich mal einen Vector als double übergeben möchte und nicht für jeden Type (TEMPLATE!) alles doppelt und dreifah schreiben möchte?

    Danke



  • NoName123 schrieb:

    manni66 schrieb:

    Warnung: Templates werden nicht in .h und .cpp aufgeteilt.

    Werden größere Projekte nicht in h /cpp Dateien aufgeteilt ?

    Ist es nicht alleine wegen der Übersicht ein Pro Argument dafür?

    Für Templates geht das nicht, für alles andere ist es jedoch richtig.



  • NoName123 schrieb:

    Wie muss ich es Umschreiben, wenn ich mal einen Vector als double übergeben möchte und nicht für jeden Type (TEMPLATE!) alles doppelt und dreifah schreiben möchte?

    Die Frage verstehe ich nicht. Gauss benutzt nur T1. Mit gauss<double> erzeugst du einen Typ, der double an den Stellen verwendet, an denen T1 steht.



  • NoName123 schrieb:

    Wie muss ich es Umschreiben, wenn ich mal einen Vector als double übergeben möchte und nicht für jeden Type (TEMPLATE!) alles doppelt und dreifah schreiben möchte?

    template<typename T>
    void f(const std::vector<T>& ) {}
    


  • manni66 schrieb:

    Warnung: Templates werden nicht in .h und .cpp aufgeteilt.

    Das kann man durchaus machen, wenn die Menge der Typen, mit dem das Template instanziiert wird, bekannt und überschaubar ist. C++: keine Regel ohne Ausnahme 😉



  • Torsten Robitzki schrieb:

    C++: keine Regel ohne Ausnahme 😉

    Mit diesen Ausnahmen sollte man einen Anfänger aber nicht verwirren. Deswegen lass ich diese Ausnahmen in der Regel in meinen Antworten bewusst weg. Aber auch davon gibt es Ausnahmen 😉


Anmelden zum Antworten