我想为一些函数编写一个包装器来检查它们的返回值或一些错误参数,所以每次调用时我都不需要写if
。此外,我希望只有在调试模式下才能调用此包装器。
我想要这样的事情:
CheckError(myfunction(myParam1, myParam2, ...);
其中myFunction
返回一些错误代码,或者例如myParam2
通过引用返回此代码。
我已经设法使用预处理器宏为第一种情况编写解决方案:
#define CHECK_RESULT(function) \
{\
if(function != VNT_SUCCESS)\
{ \
std::cout << "ERROR!\n"; \
}\
}
但我有点不喜欢使用预处理器宏。我已经阅读了一些有关使用完美转发的内容,也看到了我的问题的一些解决方案,但是他们都需要创建模板化的包装器,这需要我将函数名称和参数分开,而不是按原样包装函数调用(参见上文)。
这有什么解决方案吗?
答案 0 :(得分:0)
您可以使用常规功能而不是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
答案 1 :(得分:0)
我会做类似的事情:
#ifdef DEBUG
#define ENUMNAME EValDebug
#else
#define ENUMNAME EStatus
#endif
enum ENUMNAME {E_OK, ...}
#ifdef DEBUG
class EStatus {
EStatus(ENUMNAME e) {
switch (e) {}
}
}
#endif