目前,我正在重构一些由我们的前工作人员撰写的旧项目.我遇到了使用define包装抛出异常.
像这样的东西:
#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:从代码中添加define
UPD2:谢谢大家的回答.我决定取出所有的宏.为了进行debuging,我将使用backtrace信息扩展基本错误类,在我看来,它比仅使用文件和行的标准定义更好.
解决方法:
通常,仅在需要预处理器特定功能(如__FILE__或__LINE__)时才使用预处理器.这个宏没有做什么功能,因此它非常非典型和坏.