我想使用std :: istream :: operator >>将数据提取为无符号类型(位于模板内,因此可以是ushort,uint等)。具体来说,我正在使用std :: stringstream解析通过std :: getline()调用从文件中提取的std :: string行。
由于我正在从文件中读取数据,因此这些提取可能由于不同的原因而失败:下溢,溢出和“错误提取”。此类情况由STL处理:
如果提取失败,则将零写入值并设置故障位。如果提取导致值太大或太小而无法容纳该值,则将写入std :: numeric_limits :: max()或std :: numeric_limits :: min()并设置故障位标志。
问题:对于无符号类型,std :: numeric_limits :: min()等于0,因此无法知道我是否正在读取不是整数的内容(在这种情况下,我正在中止程序)或只是下溢(在这种情况下,我只是钳制值并发出警告)。
如何解决此问题而不使用与我合作的无符号类型的更大和/或带符号的等效项?