我目前正試圖實現我自己的標準輸入讀取器供個人使用。我創建了一個從標準輸入中讀取整數的方法,並對其有效性進行了一些檢查。我的想法是,我從標準輸入讀取一個字符串,做幾次檢查,轉換爲int,做最後的檢查,返回已讀取的值。如果發生任何錯誤,我將只填寫errorHint
以在std::cerr
上打印並返回std::numeric_limits<int>::min()
。C++ std :: string到數字模板
我認爲這個想法非常簡單直接的實現,現在我想概括概念並製作方法模板,所以基本上我可以在編譯時選擇,無論何時我需要從標準輸入讀取哪種類型的我想要的整數(它可能是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;',then(another)range check ... – LogicStuff
爲什麼不簡單使用'std :: istringstream'? –