J'essaie actuellement de mettre en œuvre mon propre lecteur d'entrée standard pour un usage personnel. J'ai créé une méthode pour lire un entier à partir de l'entrée standard et faire des vérifications sur sa validité. L'idée est que je lis une chaîne à partir de l'entrée standard, que je fais plusieurs vérifications, que je convertis en int, que je fasse les dernières vérifications, que je renvoie la valeur qui a été lue. Si une erreur se produit pendant ce temps les vérifications je vais juste remplir un errorHint
pour imprimer sur std::cerr
et retourner std::numeric_limits<int>::min()
. Je pense que l'idée est assez simple et simple à mettre en œuvre, maintenant je voulais généraliser le concept et faire le modèle de méthode, donc fondamentalement je pouvais choisir au moment de la compilation, chaque fois que je devais lire à partir de l'entrée standard quel type de nombre entier que je veux (il pourrait être int
, long
, long long
, unsigned long
et ainsi de suite mais un entier). Pour ce faire, je l'ai créé la méthode de modèle statique suivant:C++ std :: string au modèle numéro
template<
class T,
class = typename std::enable_if<std::is_integral<T>::value, T>::type
>
static T getIntegerTest(std::string& strErrorHint,
T nMinimumValue = std::numeric_limits<T>::min(),
T nMaximumValue = std::numeric_limits<T>::max());
et la mise en œuvre dans le même fichier .hpp quelques lignes ci-dessous:
template<
class T,
class>
T InputReader::getIntegerTest(std::string& strErrorHint,
T nMinimumValue,
T nMaximumValue)
{
std::string strInputString;
std::cin >> strInputString;
// Do several checks
T nReturnValue = std::stoi(strInputString); /// <--- HERE!!!
// Do other checks on the returnValue
return nReturnValue;
}
Maintenant, le problème est, je veux convertir la chaîne que je viens de lire et que je connais est dans la plage correcte du type entier T
. Comment puis-je le faire dans le bon sens?
'bool succès = std :: cin >> T_instance;, puis (autre) vérification de plage ... – LogicStuff
Pourquoi ne pas simplement utiliser' std :: istringstream'? –