NOTE: The restriction is that I cannot use exceptions (the code is eventually compiled with exceptions disabled - not under my control). The project is a real-time 3D graphics application.
我正在使用每个类都使用的自己的错误类(不久前我发布了一个关于该问题的问题)。非常简单,它所做的一切都是在函数调用期间记录错误。该函数返回该错误,也可以通过调用 SomeClass->GetLastError()
进行检查。如果它是 NO_ERROR
(所有枚举)那么我们可以继续,尽管我们可以选择忽略它(例如,如果一个特定的对象没有加载,我们可以忽略它,在它的里面放一个难看的粉红色框放置并标记错误)。当创建 State
时调用函数 CreateScene()
,然后继续调用负责创建场景的各种函数。所有这些函数都可能返回一个错误。所以我得到的是这样的:
if (CreateGrid() != NO_ERROR)
{
mCore->Terimate();
mLog->Error("\n[FATAL] Initialization Failed, check error log");
return;
}
if (SomeOtherFunc() != NO_ERROR)
{
mCore->Terimate();
mLog->Error("\n[FATAL] Initialization Failed, check error log");
return;
}
调用的函数可能具有不同的函数签名,因此参数可能不同,尽管返回类型始终是整数。我有很多像上面这样的调用,所以我为它写了一个 #define
,它将函数作为参数,并且与上面的代码完全相同。所以现在,上面的代码看起来像:
CALL_FUNC(CreateGrid());
CALL_FUNC(SomeOtherFunc());
一旦我完成定义,它就是未定义的。不管怎样,这是我唯一能想到的主意。尽管它有一个丑陋 #define
生成的代码是干净的。我应该在这里使用更好的技术吗?
谢谢
最佳答案
假设您真的不关心哪个函数失败或者可以通过测试返回值以外的其他方式确定哪个函数失败,
if (CreateGrid() != NO_ERROR || SomeOtherFunc() != NO_ERROR)
{
// Handle error
}
关于c++ - 如何在错误检查期间减少冗余代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3898772/