【发布时间】:2014-05-30 09:13:37
【问题描述】:
目前,我正在重构一些由我们的前员工编写的旧项目。我遇到过用定义包装抛出异常的问题。
类似的东西:
#define THROWIT(msg) throw common::error(msg)
代码示例:
#define THROW_FD_ERROR( fd, op )\
throw common::error_fd( errno,\
__ERR_FD_API_3\
.arg( fd )\
.arg( op )\
.arg( strerror(errno) ),\
__FILE__,\
__LINE__ )
我可以看到它的一些好处,但它们对我来说并没有那么大。 无论如何,这是一种常见的技术吗? 您认为可以从中获得哪些优势? 您是否使用定义来抛出异常? 如果是的话,这样做的目的是什么?
UPD:从代码中添加定义
UPD2:感谢大家的回答。我决定去掉所有的宏。出于调试的目的,我将使用回溯信息扩展基本错误类,在我看来,这比仅对文件和行使用标准定义要好。
【问题讨论】:
-
宏对此没有任何好处。但是,我通常定义一个布尔
fail函数。它支持 perl 惯用的“做或死”表示法,该表示法简短且视觉上可识别而不会产生噪音。 -
这确实是基于意见,但我看不出#DEFINE 有任何单一的好处。如果我真的需要一些复杂的逻辑(例如收集数据以附加到要抛出的异常),那么我会使用一个函数......
-
'不管怎样,它是一种常见的技术吗?'当然不是!
-
在您的示例中,拥有这样的宏是没有意义的,除非它具有一些调试优势,例如使用 LINE。缩短字符数还会隐藏有用的信息,例如抛出的异常类型。
-
我已经从代码中添加了定义。