我正在寫一個模板函數,將檢查用戶是否分配到正確的數據類型,答案應該在例如:浮點數據意外成功的istream的輸入到一個整數
int main(){
int E;
cout<<"Enter an integer: "<<endl;
E = clear_and_read<int>(cin);
cout<<E<<endl;
}
其中函數clear_and_read
被定義爲:
template <class T> T clear_and_read(istream& inputstream){
cin.sync();//removes anything still in cin stream
cin.clear();
T input;
inputstream>>input;
while(inputstream.fail()){
cout<<endl<<"Please ensure you are inputting correct data type. Suggested data type: "<< typeid(input).name() <<"."<<endl;
cin.sync();
cin.clear();
inputstream>>input;
}
return input;
}
現在這個作品,如果我嘗試輸入string
而不是integer
,但是當我進入一個double
它只是賦予它的第一個值。例如5.678變爲5.
我能在模板函數內部做些什麼來標記double
正被讀入int
?
'typeid的(輸入)'這只是要求你能想到的更多的麻煩。 – orlp 2012-04-24 16:19:05
我認爲這不會太有害,因爲我只是將它用作幫助用戶的建議 - 不在代碼中進行比較? 另外:感謝編輯sixlettervariables。 – QuantumO 2012-04-24 16:22:07