我编写了一个包含异常和错误代码的 C++ 文件库。程序运行时可以禁用异常。在这种情况下,用户必须检查错误代码。当然,当启用异常抛出时,不会返回错误代码,因为异常是在被调用函数返回之前抛出的。目前,禁用时仍然可能引发异常(错误)。我会尽快解决的。有人对我评论说,同时具有异常和错误代码被认为是糟糕的设计。我同意他的观点,我即将删除错误代码,并让库抛出带有更多错误信息的自定义派生异常。但我犹豫了。出于性能原因,我喜欢采用这种混合方法。这就是我想做的事情:
如果用户在通用配置文件中定义以下内容
#define ELMAX_EXCEPTION 1
以下代码
int Write(std::wstring str) ELMAX_THROW_OR_NOT;
将扩展到 2 中的任何一个。
// under C++11 compiler
int Write(std::wstring str) noexcept;
// under C++98 compiler
int Write(std::wstring str) throw();
如果ELMAX_EXCEPTION
未定义或为零,则宏将扩展为空。
int Write(std::wstring) ;
我想这样做的原因是,库用户希望不让编译器生成堆栈展开代码(用于异常)而获得性能增益,并且编译器可以更好地优化此类函数。我的 C++ 文件库正在使用 C 文件 API,唯一可能引发异常的是 new 关键字,我打算添加nothrow
. UTF-8 代码也可以抛出异常(也需要更改)
char *parr = new (nothrow) char[num];
if(parr==NULL)
// handle it either through error code or throw exception (if enabled)
对于我的库错误,请告知我是否应该采用纯异常方法或混合方法(如前所述)。谢谢你。