Template Spezialisierung



  • Hi,
    ich habe folgendes problem.
    Ich habe eine klasse mit zwei Template-Parametern. Wenn ich beide spezialisiere schluckt das der Compiler ( 3 ). Ebenso, wenn ich keinen Parameter spezialisiere ( 2 ).

    Jetzt meine Frage: Geht es auch nur einen Parameter (hier T2) zu spezialisieren und den anderen allgemein zu halten? Wenn ja wie ist die Syntax. Müßte ja irgenwie aussehen wie in ( 1 ).

    template<class T1, class T2>
    {
      struct test
      {
        void doo     (T1 param1, T2 param2);
      }
    }
    //1 -> wie bekomme ich hier nur einen Parameter spezialisiert?
    template <typename T1> 
        void test<T1 , bool>::doo(T1 type1, bool type2){}
    //2
    template <typename T1, typename T2>
        void test<T1 , T2>::doo(T1 type1 , T2 type2){}
    //3
    template <> 
        void test<bool , bool>::doo(bool type1, bool type2){}
    

    Für Hilfe wäre ich dankbar, häng schon einige Tage an diesem Problem und finde keine Lösung.

    bye
    mss



  • Was du da spezialisierst ist nicht die Klasse sondern nur die Funktion doo.
    Leider kann man Funktionen nicht partiell spezialisieren, dazu müsstest du dann wirklich die komplette Klasse spezialisieren:

    template<class T1>
    // {   <--- die KLammern hier sind unnötig
    struct test<T1, bool>
    {
        void doo     (T1 param1, bool param2);
    };  // <--- das Semikolon ist sehr wohl nötig
    // }
    

Anmelden zum Antworten