|
|
1
6
通过捕获(…)并调用一个共享处理程序函数来重新调用和分派,避免在每个调用站点复制catch块:
|
|
|
2
2
我经常遇到的一个想法是,异常应该被能够处理它们的级别捕获。例如,传输数据的函数可能会捕捉到CRC错误,一旦捕捉到该异常,它可能会尝试重新传输,而“无信号”异常可能会捕捉到更高级别的异常,并中断或延迟整个操作。 但我的猜测是,这些异常中的大多数都会被捕获在同一个函数周围。它 是 单独捕获和处理它们是个好主意(如soln 2),但您认为这会导致大量重复代码(导致soln 3)。 我的问题是,如果有很多代码要重复,为什么不把它变成一个函数呢? 我在考虑…
我想应该是exceptiondispatch()函数,而不是
当然,这个函数过于简化了—您可能需要围绕datahw使用一个完整的包装器类;但我的观点是,最好有一个集中的点来处理所有datahw异常—如果该类的不同用户处理它们的方式相似的话。 |
|
|
3
1
也许您可以为datahw类编写一个包装类? 包装器将提供与datahw类相同的功能,但也包含所需的错误处理代码。好处是,您可以将错误处理代码放在一个地方(干燥原则),所有错误都将被统一处理。例如,可以将包装器中的所有低级I/O异常转换为高级异常。 基本上防止向用户显示低级异常。 正如巴特勒·兰普森所说:计算机科学中的所有问题都可以通过另一个间接层次来解决。 |
|
4
1
有三种方法可以解决这个问题。 正在写入包装函数为每个函数编写一个包装函数,该函数可以引发处理异常的异常。然后,所有调用方调用该包装器,而不是原始的抛出函数。 使用函数对象另一种解决方案是采用更通用的方法,编写一个函数,它接受一个函数对象并处理所有异常。下面是一些例子:
现在,如果你想做点什么,你可以做:
因为您提供了函数对象,所以也可以管理状态。假设senddata更新len,这样它就知道读取了多少字节。然后,您可以编写读取和写入的函数对象,并为到目前为止读取的字符数保持计数。 第二种方法的缺点是不能访问抛出函数的结果值,因为它们是从函数对象包装器调用的。无法轻松获取函数对象绑定器的结果类型。一种解决方法是编写一个结果函数对象,该对象在函数对象执行成功后由ExecuteAndHandle调用。但是,如果我们把太多的工作放在第二种方法上,仅仅是为了让所有的家政工作顺利进行,那么结果就不值得了。 两者结合还有第三种选择。我们可以将这两个解决方案(包装器和函数对象)结合起来。
诀窍是
|
|
|
simply lemon · python上链表的添加方法 1 年前 |
|
|
Anonymous · 为什么在这个例子中self和类名的用法不同? 1 年前 |
|
|
P N Singh · 在CPP Oops中调用对象而不创建它 1 年前 |
|
|
Muthuraj · 如何创建一个通用工厂来创建某种类型的实例[重复] 1 年前 |
|
|
Andy Votava · 从父类定义调用学生方法 1 年前 |