我正在写一个模板函数,将检查用户是否分配到正确的数据类型,答案应该在例如:浮点数据意外成功的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