私は現在、個人用の標準入力リーダーを実装しようとしています。私は、標準入力から整数を読み込み、その妥当性をチェックするメソッドを作成しました。アイデアは、標準入力から文字列を読み込み、いくつかのチェックを行い、intに変換し、最後のチェックを行い、読み込まれた値を返します。その間に何らかのエラーが発生した場合は、errorHint
を入力してstd::cerr
に印刷し、std::numeric_limits<int>::min()
に返信します。C++ std :: string to number template
私はこのアイデアを実装するのがとても簡単で簡単だと思っています。今ではコンセプトを一般化してメソッドテンプレートを作成したかったので、標準入力から読み込む必要があるときはいつでもコンパイル時に選択できました整数が必要です(int
、long
、long long
、unsigned long
などですが整数です)。そのために、私は次の静的テンプレートメソッド作成しました:
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());
を、以下同じ.HPPファイル数行での実装:
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;
}
は、今の問題は、私が変換したいです私が読んだばかりの文字列は、整数型T
の正しい範囲内にあります。これをどうすればいいのですか?
'bool success = std :: cin >> T_instance;'、(別の)範囲チェック... – LogicStuff
単に 'std :: istringstream'を使わないのはなぜですか? –