错误检查包装c++

Error checking wrapper c++

本文关键字:c++ 包装 检查 错误      更新时间:2023-10-16

我想为一些函数写一个包装器来检查它们的返回值或一些参数的错误,所以我不需要每次调用时都写if s。另外,我希望这个包装器只在调试模式下被调用。

我想要这样的东西:

CheckError(myfunction(myParam1, myParam2, ...);

,其中myFunction返回一些错误代码,或者例如myParam2通过引用返回此代码。

我已经设法编写解决方案的第一个情况下使用预处理宏:

#define CHECK_RESULT(function) 
{
    if(function != VNT_SUCCESS)
    { 
        std::cout << "ERROR!n"; 
    }
}

但是我有点不喜欢使用预处理宏。我读过一些关于使用完美转发的东西,也看到了一些解决我的问题的方法,但他们都需要创建模板包装,这需要我分开函数名和参数,而不仅仅是包装函数调用(见上文)。

有什么解决办法吗?

您可以使用常规函数而不是MACRO:

void CheckError(const EStatus& res) // Reference to allow your second check
{
#ifdef DEBUG // Choose appropriate flag according to your build option
    if (res != VNT_SUCCESS)
    {
        std::cerr << "ERROR!n";
    }
#endif
}

并使用:

CheckError(myfunction(myParam1, myParam2));
CheckError((myfunction2(myParam1, myParam2), myParam2)); // To check myParam2

我会这样做:

#ifdef DEBUG
#define ENUMNAME EValDebug
#else
#define ENUMNAME EStatus
#endif
enum ENUMNAME {E_OK, ...}
#ifdef DEBUG
class EStatus {
  EStatus(ENUMNAME e) {
    switch (e) {}
  }
}
#endif