Template Klasse mit spezialisierten Methoden?



  • Hallo,

    bei mir hakt es gerade bei diesem Konstrukt (kompiliert nicht)

    template <typename T>
    class Test
    {
    public:
    	bool Do<bool>()
    	{
    		return true;
    	}
    
    	bool Do<int>()
    	{
    		return false;
    	}
    
    };
    
    Test<bool> t;
    t.Do();
    

    Ich versuche eine Template Klasse zu erzeugen und dann die jeweilige Do-Methode aufzurufen.
    Der Gedanke ist: Ich weiß beim erzeugen der Instanz genau, welchen Typ sie hat, wenn ich aber Do aufrufe, weiß ich nicht mehr, von welchem Typ das Template war.

    Ist so etwas möglich?
    Beim aufruf von t.Do(); will ich natürlich nicht so etwas wie t<true>.Do() aufrufen


  • Mod

    Weder Templates noch Templatespezialisierungen funktionieren so wie du es versuchst. Guck dir das noch einmal an. So geht's:

    template <typename T> class Test;
    
    template<> class Test<bool>
    {
    public:
      bool Do() {return true;}
    };
    
    template<> class Test<int>
    {
    public:
      bool Do() {return false;}
    };
    
    int main(){
      Test<bool> t;
      t.Do(); 
    }
    

    edit: Eventuell meinst du auch so etwas, das wird aus deinem Beitrag nicht klar:

    template <typename T> class Test
    {
    public:
      bool Do() {return true;}
    };
    
    template<> bool Test<int>:: Do() {return false;}
    


  • Das hat geholfen. Danke

    Ich hatte relativ lange mit den Templates von C++ nichts mehr zu tun.

    Danke nochmal.


  • Mod

    Das lässt sich auch noch ohne extra Spezialisierung durch Anwendung eines entsprechenden Prädikates auf T schreiben

    #include <type_traits>
    template <typename T> class Test
    {
    public:
      bool Do() { return !std::is_same<T,int>::value; }
    };
    

Anmelden zum Antworten