簡體   English   中英

檢查包裝器C ++時出錯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM