Funzione Template con argomento void

di il
3 risposte

Funzione Template con argomento void

Ho scritto questo semplice programma che utilizza una funzione input che "dovrebbe" accettare qualsiasi tipo di variabile ed ho provato usando un template ma la funzione di tipo template che ha argomento void ma il compilatore dando void alla funzione input dà errore se metto invece un argomento tipo definito da template va bene, non è possibile definire una funzione generica tipo template ma che non riceve argomenti in ingresso??? O sbaglio qualcosa io???

Grazie anticipatamente!!!!

#include<iostream>
#include<math.h>

using namespace std;

template< class T>
T input(void)
{
	T n=0;

	cout<<"\nInserire un valore : ";
	cin>>n;

	return n;
}

double hypotenuse(double x, double y);
int smallest(int x, int y, int z);
void instruction(void);
float intTofloat(int x);


void main()
{
	double x,y;

	cout<<"\nInserire i due cateti per calcolarne l'ipotenusa\n\n";
	x = input();
	y = input();

	cout<<"\nL'ipotenusa = "<<hypotenuse(x,y);

	int i1,i2,i3;

	cout<<"\nCalcola il più piccolo fra 3 numeri interi \n\n";
	i1=input();
	i2=input();
	i3=input();

	cout<<"\nIl più piccolo fra i 3 numeri = "<<smallest(i1,i2,i3);

	instruction();

	cout<<"\nTrasforma un int in float \n\n";
	
	i1 = input();
	cout<<"\nIl numero in float = "<<intTofloat(i1)<<endl;

}

double hypotenuse(double x, double y)
{
	return (sqrt(pow(x,2.0)+pow(y,2.0)));
}
int smallest(int x, int y, int z)
{
	int small;

	small=x;

	if(y<small)
		small=y;

	if(z<small)
		small=z;

	return small;
}
void instruction(void)
{
	cout<<"\nQuesta e' una prova di un'istruzione\n\n";
}
float intTofloat(int x)
{
	return ((float)x);
}

3 Risposte

  • Re: Funzione Template con argomento void

    Certo che lo puoi fare. L'unico tuo problema è che non dici alla funzione che tipo di dato vuoi che lui ritorni.
    
    #include <iostream>
    #include <iomanip>
    #include<iostream>
    #include<math.h>
    
    using namespace std;
    
    template <class T>
    T input(void)
    {
    	T n=0;
    
    	cout<<"\nInserire un valore : ";
    	cin>>n;
    
    	return n;
    }
    
    double hypotenuse(double x, double y);
    int smallest(int x, int y, int z);
    void instruction(void);
    float intTofloat(int x);
    
    
    void main()
    {
    	double x,y;
    
    	cout<<"\nInserire i due cateti per calcolarne l'ipotenusa\n\n";
    	x = input<double>();
    	y = input<double>();
    
    	cout<<"\nL'ipotenusa = "<<hypotenuse(x,y);
    
    	int i1,i2,i3;
    
    	cout<<"\nCalcola il più piccolo fra 3 numeri interi \n\n";
    	i1=input<int>();
    	i2=input<int>();
    	i3=input<int>();
    
    	cout<<"\nIl più piccolo fra i 3 numeri = "<<smallest(i1,i2,i3);
    
    	instruction();
    
    	cout<<"\nTrasforma un int in float \n\n";
    
    	i1 = input<int>();
    	cout<<"\nIl numero in float = "<<intTofloat(i1)<<endl;
    
    }
    
    double hypotenuse(double x, double y)
    {
    	return (sqrt(pow(x,2.0)+pow(y,2.0)));
    }
    int smallest(int x, int y, int z)
    {
    	int small;
    
    	small=x;
    
    	if(y<small)
    		small=y;
    
    	if(z<small)
    		small=z;
    
    	return small;
    }
    void instruction(void)
    {
    	cout<<"\nQuesta e' una prova di un'istruzione\n\n";
    }
    float intTofloat(int x)
    {
    	return static_cast<float>(x);
    }
    
  • Re: Funzione Template con argomento void

    La ringrazio adesso funziona, ma io avevo preso spunto dall'esempio di un libro, dove non si usa la notazione dell'argomento restituito tra le <> , sono necessarie perchè la funzione ha argomento void ?????
    
    #include<iostream>
    
    using namespace std;
    
    template <class T>
    T max(T v1, T v2, T v3)
    {
    	T max;
    
    	max = v1;
    
    	if(v2>max)
    		max=v2;
    	if(v3>max)
    		max=v3;
    
    	return max;
    }
    
    void main()
    {
    	cout<<"\nUsando la stessa funzione si usano int, double e char\n\n";
    
    	int i1,i2,i3;
    
    	cout<<"\nInserisci un intero : ";
    	cin>>i1;
    	cout<<"\nInserisci un intero : ";
    	cin>>i2;
    	cout<<"\nInserisci un intero : ";
    	cin>>i3;
    
    	cout<<"\nIl valore max = "<<max(i1,i2,i3);
    
    	double d1,d2,d3;
    
    	cout<<"\n\n\nInseri un valore in virgola mobile : ";
    	cin>>d1;
    	cout<<"\nInseri un valore in virgola mobile : ";
    	cin>>d2;
    	cout<<"\nInseri un valore in virgola mobile : ";
    	cin>>d3;
    
    	cout<<"\nIl valore max = "<<max(d1,d2,d3);
    
    	char c1,c2,c3;
    
    	cout<<"\n\n\nInserisci un carattere : ";
    	cin>>c1;
    	cout<<"\nInserisci un carattere : ";
    	cin>>c2;
    	cout<<"\nInserisci un carattere : ";
    	cin>>c3;
    
    	cout<<"\nIl carattere maggiore = "<<max(c1,c2,c3)<<endl<<endl;
    
    }
    
  • Re: Funzione Template con argomento void

    Si perche non li passi nessun tipo di dato in entrata e il compilatore non può dedurre il tipo di dato su cui lavorare. Quando passi dei parametri il tipo di dato è specificato per quello funziona.
Devi accedere o registrarti per scrivere nel forum
3 risposte