Template Memberfunktion in normalen Klassen



  • Hi

    Ist es in C++ möglich innerhalb einer Klasse eine Template Memberfunktion bzw. operator zud definierem

    etwa so

    class test
    {
      template<class T> void read(T var);
    }
    
    template<class T> void read(T var)  {   }
    

    Beim kompilieren der oberen Zeilen gibt es keinen Fehler allerdings wenn diese Funktion im Programm dann verwendet wird.
    etwa so

    test t1;
    int i=0;
    t1.read(i);
    

    Bringt er beim kompilieren(VC6) immer einen Fehler, dass keine geeigente Instanzierung der Template Klasse gefunden werden kann.

    thx
    Lukas



  • template<class T> void test::read(T &var)  {   }
    

    [edit]
    byref zu übergeben wäre glaub ich sinnvoller



  • *nix schrieb:

    Ist es in C++ möglich innerhalb einer Klasse eine Template Memberfunktion bzw. operator zud definierem

    Ja.

    *nix schrieb:

    etwa so

    class test
    {
      template<class T> void read(T var);
    }
    
    template<class T> void read(T var)  {   }
    

    Eher so:

    class test
    {
    public:
    template<class T> void read(T var);
    };
    
    template<class T> void test::read(T var)  {   }
    

    Bringt er beim kompilieren(VC6) immer einen Fehler, dass keine geeigente Instanzierung der Template Klasse gefunden werden kann.

    Eine Template-Klasse gibt es hier nicht. Insofern ist das sicher nicht der Fehler den du wirklich bekommst. Ist in deinem Testcode die Methode auch private?

    Btw: Beim VC 6 gibt es bei Membertemplates eine Besonderheit zu beachten. Dieser Compiler erlaubt die Definition eines solchen Templates nur innerhalb der Klassendefinition. Nicht aber außerhalb.
    Du musst beim VC also:

    class test
    {
    public:
       template<class T> void read(T var)
       {
           ...
       }
    };
    

    schreiben.


Anmelden zum Antworten