假设我正在编写一个包含C风格API的类.
int cstyleInit()
int cstyleCleanup()
Run Code Online (Sandbox Code Playgroud)
一般来说,方法是放入cstyleInit()我的构造函数和cstyleCleanup()析构函数中,但我的问题是,如何处理构造函数中的初始化失败?
简单的方法是这样的:
MyWrapper::MyWrapper() {
int ret = cstyleInit()
if (ret = FAILUREMODE1) {
cstyleCleanup();
throw exception("failure mode 1");
}
else if (ret = FAILUREMODE2) {
cstyleCleanup();
throw exception("failure mode 2");
}
...
}
Run Code Online (Sandbox Code Playgroud)
据我所知,这样可以正常工作.唯一(次要)的问题是你必须为每个失败模式显式调用cstyleCleanup(),这对我来说似乎不是很好.
我知道这是一个小问题,但有更多的c ++/RAII方式吗?
唯一(次要)的问题是你必须为每个失败模式显式调用cstyleCleanup(),这对我来说似乎不是很好.
它与RAII没有关系,但可能是关于避免在包装API时重复代码以为特定错误代码抛出异常.
是否有类似于ret != NOFAILURE此API的可用内容,使您可以cstyleCleanup();独立调用所有这些专业?
MyWrapper::MyWrapper() {
int ret = cstyleInit()
if (ret != NOFAILURE) {
cstyleCleanup();
}
// Your exception mapping code ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
227 次 |
| 最近记录: |