NoS*_*tAl 5 c# c++ boost exception
介绍(来自 Eric Lippert 博客):
令人烦恼的异常是不幸的设计决策的结果。恼人的异常是在完全非异常的情况下抛出的,因此必须一直被捕获和处理。
令人烦恼的异常的经典示例是 Int32.Parse,如果给它一个无法解析为整数的字符串,它就会抛出异常。但是此方法的 99% 用例是转换用户输入的字符串,这可能是任何旧事物,因此解析失败绝不是例外。更糟糕的是,如果不自己实现整个方法,调用者就无法提前确定他们的参数是否错误,在这种情况下,他们不需要首先调用它。
现在重要的部分:
这个不幸的设计决定非常令人烦恼,因此框架团队当然在此后不久实施了 TryParse,它做了正确的事情。
来自 MSDN Int32.TryParse:
返回值 类型:System.Boolean 如果 s 转换成功,则为 true;否则为假。
所以同事最近正在研究一些需要检查字符串是否是数字的小代码,所以在考虑之后并意识到没有好的 C++ 解决方案(基本上它是一个 for__each/find_if 或 boost:lexical_cast try catch)我想拥有is_convertible或来自 boost 的东西会有多好?
Ofc 我可以包装 boostlexical_cast并在 try 块的末尾返回 true 并在 catch 块的末尾返回 false 但我更喜欢现有的做法:) 解决方案。
如果您可以使用 boost,那么您可以使用boost::conversion::try_lexical_convert:
#include <boost/lexical_cast/try_lexical_convert.hpp>
std::string str("1.2");
double res;
if(boost::conversion::try_lexical_convert<double>(str, res)){
//everything normal
}
else{
//we got a problem
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
667 次 |
| 最近记录: |