Dopo una lunga pausa estiva, ho ripreso in mano quanto stavo facendo, e ho provato a implementare il metodo read in questo modo, cioè che restituisce true se l'input viene validato, false in caso contrario.
Qui sotto ho incollato il codice relativo all'input di un unsigned int, di cui puo' essere specificato o meno un intervallo a piacere dell'utente, ad esempio l'input deve essere tra 10 e 20, estremi compresi (pre int, char, double cambia qualcosa all'interno del corpo della funzione, ma l'impostazione e identica).
codice:
boolMyValidator::read(std::istream& is,unsigned int& data,const unsigned int& min_val,const unsigned int& max_val)
{
std::string line;
do
{
std::getline(is,line);
}while(line.empty());
int data2;
std::istringstream iss(line);
iss>>data2;
if(!iss||!iss.eof())
{
return false;
}
else if(data2<0)
{
return false;
}
data=static_cast<unsigned int>(data2);
if((data<min_val)||(data>max_val))
{
return false;
}
else
{
return true;
}
}
in questo modo nel main o dove serve l'input puo' essere fatto in questo modo
codice:
while(!MyValidator::read(std::cin,scelta,0,1000))
{
std::cout<<"\nInput errato\n";
}
Qualcuno ha ulteriori suggerimenti / critiche, alla luce di un possibile utilizzo coi file?