c++ - 如何在错误检查期间减少冗余代码

标签 c++

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/

相关文章:

C++ 和 Zip 实用程序

c++ - 有什么方法可以防止 Boost.Build 递归扫描头文件中的#include 指令?

python - Home-brew 在 Mac 上安装 OpenCV 2.4 和 OpenCV3.1?

C++ 全局初始化顺序忽略依赖关系?

c++ - gSOAP C++ 多线程独立服务器和客户端示例

c++ - 使用 cmake 和 travis boost 1.67 静态库

c++ - 如何将参数的数组初始值设定项迁移到 C++11 中的可变模板参数

c++ - 在笛卡尔二维空间的每个象限中找到最近的点

c++ - 我如何使这个程序更小、更高效?

c++ - 4x4矩阵预乘和后乘