Fnkt. Templates in Klassen Templates außen auflösen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Fnkt. Templates in Klassen Templates außen auflösen

    Hi Leute ;) ,

    ich hab mal ne Frage zu Templates wie der Titel schon verrät ;-).
    Ich ein eigenes kleines KlassenTemplate geschrieben(zur Übung weil ich grad c++ lern), in diesem KlassenTemplate hab ich ein FunktionsTemplate deklariert.
    KlassenTemplates und FunktionsTemplates für sich alleine funktionieren aber gemixt klappt gar nichts mehr!

    Hier mal mein code in der cpp Datei :

    Quellcode

    1. #include <iostream>
    2. #include <string>
    3. #include "Demo.h"
    4. using namespace std;
    5. void main()
    6. {
    7. Demo<int> Test;
    8. Test.berechne<int>();
    9. }
    Alles anzeigen


    Und dies ist der Code der Demo.h:


    Quellcode

    1. [syntax]
    2. template<class cT> class Demo
    3. {
    4. public:
    5. template<class fT> fT berechne();
    6. cT var1;
    7. cT var2;
    8. };
    9. // ****** Auflösen aber wie ******
    10. {
    11. fT ergebnis = var1 + var2;
    12. cout << ergebnis << endl;
    13. return ergebnis;
    14. }
    Alles anzeigen




    Ich hab den Code aus dem C / C++ Kompendium abgetippt,
    Tippfehler sind keine drin aber es funktioniert trotzdem nich.

    Wäre Klasse wenn ihr mir helfen könntet und mir sagen könntet wie ich FunktionsTemplates ausserhalb von KlassenTemplates richtig definiere und in der main richtig aufrufe.

    ..vorab schon mal vielen Dank für eure Mühe :)

    P.S.: Ich habs schon in einem anderen forum versucht aber das hat nichht so geklappt :wink:

    Shadow Eater
  • Alles klar,
    VC++ 6 hat so seine Probleme mit standardkonformen Verhalten....insbesondere in dem Bereich Templates!
    Daraus kann man dem Compiler nur bedingt nen Vorwurf machen,schließlich ist er ja fast älter als der Standard.
    Wie dem auch sei,besorg dir nen standardkonformen Compiler,wie z.B. VC++ 2005 Express und alles wird gut :wink: .

    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • Ach ja;
    und prinzipiell muss es so aussehen:

    Quellcode

    1. template<class T>
    2. class foo
    3. {
    4. public:
    5. template<class U>
    6. U func();
    7. };
    8. template <class T>
    9. template <class U>
    10. U foo<T>::func()
    11. {
    12. U t=U();
    13. return t;
    14. }
    Alles anzeigen


    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)
  • "phax" schrieb:

    Sollte es nicht so aussehen:

    Quellcode

    1. ...
    2. template <class T, class U>
    3. U foo<T>::func()
    4. ...


    ???

    Ne,laut Standard nicht :wink: .
    14.5.2 Member templates [temp.mem]
    1 A template can be declared within a class or class template; such a template is called a member template. A
    member template can be defined within or outside its class definition or class template definition. A member
    template of a class template that is defined outside of its class template definition shall be specified with
    the templateparameters
    of the class template followed by the templateparameters
    of the member template.
    [Example:
    template<class T> class string {
    public:
    template<class T2> int compare(const T2&);
    template<class T2> string(const string<T2>& s) { /* ... */ }
    // ...
    };
    template<class T> template<class T2> int string<T>::compare(const T2& s)
    {
    // ...
    }
    —end example]


    Gruß void
    "Probleme kann man niemals mit derselben Denkweise lösen,
    durch die sie entstanden sind." (A. Einstein)