Templateklasse - statische und sonstoge zugehörige Funktionen



  • Wie läuft das bei Templateklassen mit statischen oder externen Klassen (z.B. Ausgabe auf ostream, op+, Vergleiche, ...). Kann da jemand ein Beispiel geben, linken?



  • Sorry, versteh ich nicht



  • Hallo,

    ich verstehe auch nicht, was du meinst. Kannst du das nochmal etwas ausfuehrlicher
    Beschreiben?

    mfg
    v R



  • sorry, statische und externe Funktionen, nicht Klassen.



  • @work schrieb:

    sorry, statische und externe Funktionen, nicht Klassen.

    Das funktioniert genauso, wie bei nichtstatischen Funktionen. Und externe
    Template Funktionen sind ja normale Template-Funktionen (ja, hoert sich bloed an).

    Template-Funktion:

    template<typename type>
    type add(const type& a, const type& b) {
        return a+b;
    }
    

    Bei Klassen ist es auch nicht so schwer:

    template<typename type>
    class Test {
        private:
        public:
            static type add(const type& a, const type& b) {
                return a+b;
            }
    };
    
    //aufruf z. B.
    int i = Test<int>::add(2, 2);
    

    mfg
    v R



  • und externe Funktion, z.B. Ausgabe von Test auf cout?



  • @work schrieb:

    und externe Funktion, z.B. Ausgabe von Test auf cout?

    template<typename type>
    class Test {
        private:
             std::string testStr;
        public:
             Test() : testStr("Test")
             {}
    
             const std::string &getStr() const {
                 return testStr;
             }
    };
    
    template<typename type>
    ostream &operator<<(ostream &os, Test<type> &test) {
        os<<test.getStr();
        return os;
    }
    
    //irgendwo im programm
    Test<int> test;
    std::cout<<test<<endl;
    

    Hoffe ich hab keinen Fehler gemacht, sollte so funktionieren.

    [edit]
    Hatte vergessen, dass es hier um Templates geht. Das hatte ich noch nicht
    gemacht, aber so muesste es eigentlich funktionieren.
    [/edit]

    mfg
    v R


Anmelden zum Antworten