Parametri template

di il
5 risposte

Parametri template

Salve, vorrei porvi una domanda. Ammettendo cha abbia un template di classe del tipo:

template <class T>
class vettore{
        public:
                    void metodo (T parametro);
        private:
                      .....
}
Come posso fare per implementare la funzione metodo solo per il tipo T = int?

5 Risposte

  • Re: Parametri template

    Non siate numerosi a rispondere. Grazie.
  • Re: Parametri template

    Guarda typeid
    http://www.cplusplus.com/reference/std/typeinfo/type_info/
    
    #include <typeinfo>
    #include <iostream>
    
    template <class T>
    class vettore{
    public:
    	vettore(){};
    	void metodo (T parametro);
    	
    private:
    };
    
    template <class T>
    void vettore<T>::metodo( T parametro )
    {
    	if(typeid(T) == typeid(int))
    	{
    		std::cout << "OK int provided: " << parametro;
    	}
    	else
    	{
    		std::cout << "Not an int";
    	}
    }
    
  • Re: Parametri template

    Oppure devi utilizzare il template specialization
    
    #include <iostream>
    
    template <class T>
    class vettore{
    public:
    	vettore(){};
    
    private:
    };
    
    template <>
    class vettore<int>{
    public:
    	vettore<int>(){};
    	void metodo( int parametro );
    private:
    };
    
    
    void vettore<int>::metodo( int parametro )
    {
    	std::cout << "OK int provided: " << parametro;
    }
    
    
    in questo esempio metodo viene chiamato solo se il parametro è un int, se il template usa altri tipi di dati non ti si compila neanche quando chiami metodo.
  • Re: Parametri template

    Ultimo metodo, fa un pò la stessa roba di BOOST_STATIC_ASSERT
    
    template<bool> struct StaticAssert;
    template<> struct StaticAssert<true> {};
    
    
    template <class A, class B>
    struct is_same
    {
    	static const bool value = false;
    };
    
    template <class A>
    struct is_same<A, A>
    {
    	static const bool value = true;
    };
    
    
    template <class T>
    class vettore{
    public:
    	vettore(){};
    	void metodo (T parametro);
    
    private:
    };
    
    template <class T>
    void vettore<T>::metodo( T parametro )
    {
    	StaticAssert<is_same<T,int>::value>();
    	std::cout << parametro;
    }
    
    
    il codice si compila solo per T = int;
  • Re: Parametri template

    Grazie mille. Proverò con queste soluzioni.
Devi accedere o registrarti per scrivere nel forum
5 risposte