- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
关于函数有一个 try-catch 的东西,我认为它有时可能非常有用:
bool function()
try
{
//do something
}
catch(exception_type & t)
{
//do something
}
所以问题的第一部分:这种风格在一般情况下是否被认为是不好的?
我使用这种方法的具体例子是:
我们的项目包含大量 C 和 C++ 代码。我们有自定义异常类型(不是 std::exception 派生的)。我需要集成 XML 库并将所有异常转换为我们的类型。所以,基本上,最后一步是从 XML 库中捕获所有异常并转换它们。
之前的功能:
bool readEntity(...)
{
while(...)
{
if(...)
{
//lot's of code...
}
}
}
之后:
bool readEntity(...)
try
{
while(...)
{
if(...)
{
//lot's of code...
}
}
}
catch(XMLBaseException & ex)
{
//create our exception and throw
}
我的想法是这样的:我明确表示我打算将所有从一种类型派生的异常转换为自定义类型,并且我们保持屏幕没有水平滚动条(因为水平滚动条不好)。
好吧,实际上我在代码审查期间因为这种方法不明确而受到了很多批评。
所以我想听听你的想法。
更新:明确一点:重构函数不是一个选项。实际上它写得很好。
最佳答案
实际上,函数级 try block 的唯一原因是构造函数,否则它是一个有点晦涩的功能,不会给你带来太多好处。这样做同样容易:
bool readEntity(...)
{
try
{
while(...)
{
if(...)
{
//lot's of code...
}
}
}
catch(XMLBaseException & ex)
{
//create our exception and throw
}
}
如果您在水平滚动方面遇到问题,那么要做的就是拆分您的代码。 try/catches 很复杂,这应该在嵌套级别表示,而不是隐藏。
在构造函数中,这是一个不同的问题:没有其他方法可以在初始化列表中捕获异常:
SomeClass::SomeClass(parameter p1, parameter p2) : Member1(p1), Member2(p2)
try
{
}
catch(Exception &ex)
{
// handle and rethrow
}
当然,如果您在构造过程中遇到异常,除了记录和重新抛出(在构造函数的情况下无论如何都会重新抛出)之外,您可能无法恢复。你的对象还没有完全构建好,你真的不能用它做任何事情。您唯一可以相信有效的是参数(尽管如果初始化失败,那很可能是由于参数错误)。
查看此 GOTW对此进行讨论。
关于c++ - C++ 中的函数范围异常处理——这是一种糟糕的风格吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/620795/
我想在这里说的是我在从之前离开的相同状态重新启动我的应用程序时遇到的问题。我在这方面做了很多研发,并且已经解决了 stackoverflow 中发布的问题。所以请不要说它是重复的。 我试过设置这些选项
当我在我的类中实现 __cmp__ 函数时,python 是否会在内部重载“==”,我们在 C++ 中是如何做到的? 只是好奇。我是 python 的新手。 :) 最佳答案 ==的含义当您定义 __c
我在 Raspberry Pi2 上安装了 Gitlab,几个月来它运行良好。但自从关闭了RPi的电源后,它就不再起作用了。网页返回502错误。 502 Whoops, GitLab is takin
有人知道用户登陆带有Webfonts的页面时为什么Google Chrome浏览器崩溃吗 它并不会一直发生,而是经常发生 我刚得到一个蓝屏页面,却不知道为什么:该页面不是来自重定向时就很好了。 这是我
当我登录时,Skype始终会给出此错误。 糟糕,Skype存在问题。尝试注销然后重新登录。 STARTUP_LOAD_ERROR MACBOOK 最佳答案 Macbook 用户 退出Skype 回家
我正在尝试从 flutter 开始,首先我在 cmd 上运行 flutter doctor 它有效。在我安装了 ANDROID SDK 之后,同样的命令 flutter doctor 给了我异常:
从 android studio 终端运行 flutter attach 不工作。显示错误flutter 意外退出。 终端输出: flutter attach Checking for adverti
当使用 TinyMCE 4 测试所有浏览器时,Chrome 非常慢。 (我尝试从 TinyMCE 中删除所有插件,但没有任何区别。) Chrome 需要大约 20-25 秒在 TinyMCE 中呈现一
我试图让下面的脚本工作,以便从远程服务器(服务器 1)读取特定目录中的 CSV 文件列表,并将数据移植到另一台服务器的 PostgreSQL 数据库中。 我已经创建了一个 rsa SSH key 并将
在嵌入式 linux 环境中(在 PowerPC 上定制的 2.4.25)几个小时后我得到以下内核 panic : Oops: kernel access of bad area, sig: 11 N
在将现有 Node.js (Hapi.js) + RethinkDB 从 OVH VPS(最小 vps)迁移到 AWS Lambda( Node )+ DynamoDB 的过程中,我最近遇到了一个非常
我是一名优秀的程序员,十分优秀!