1

我编写了一个包含异常和错误代码的 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)

对于我的库错误,请告知我是否应该采用纯异常方法或混合方法(如前所述)。谢谢你。

4

1 回答 1

0

这取决于你想对图书馆做什么。显然,从设计的角度来看,例外情况更好,但它们确实经常被某些类型的应用程序禁用(例如沉浸式 3D 游戏)。

于 2012-12-29T09:42:23.247 回答