[英]Error checking wrapper c++
我想為一些函數編寫一個包裝器,以檢查它們的返回值或某些參數是否有錯誤,因此我不需要在每次調用某些東西時都編寫if
。 我也希望僅在調試模式下才調用此包裝器。
我想要這樣的東西:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.