簡體   English   中英

兩個抽象類,派生自相同的基礎 class。 如何訪問從一個抽象 class 到另一個的指針

[英]Two abstract classes, deriving from the same base class. How can I access a pointer from one abstract class to the other

我正在為我的 cppUnit 測試工具編寫一個助手 class 以打印帶有空格的測試描述。 由於測試工具連接了各種元素以命名測試 class,因此測試名稱中的空格會導致錯誤。 這聽起來可能微不足道,但是當您查看測試 output 的 60 個測試時,這些測試都類似地命名為 run on sentence in camel case,空格很好。

因為我不想碰線束,所以我創建了我的助手 class 以便它派生自 class 測試,每個單獨的測試也是從測試派生的 class。 我不擅長多態性,所以請耐心等待。 我要做的是從我的助手 class 成員 getName() 訪問單元測試 class ,這是從測試庫 class 繼承的公共成員。

這是我迄今為止所做的摘錄。 它確實有效,但是我希望在實際調用這個 function 時更干凈一些。

測試助手類

class TestHelperClass : public Test
{
  public:
  virtual ~TestHelperClass(){}

  template <typename T>
  static const char* getReadableName(T testClassPtr)
  {
    char * uglyName;
    int ugLen;
    ugLen = strlen(testClassPtr->getName().asCharString());
    uglyName = (char*)malloc(ugLen);
    memcpy(uglyName, testClassPtr->getName().asCharString(), ugLen);
    std::string prettyName;
    // Handle conversion...
    free(uglyName);
    return prettyName.c_str();
  }
};

單元測試

僅供參考,這是一個宏,采用兩個 arguments 一個組和一個名稱,並生成一個繼承測試 class 的 class。

TEST(groupNameString, reallyLongTestDescriptionString)
{
  printf("%s\n", TestHelperClass::getReadableName(this));

  // remainder of the unit test.
}

顯然,我遠非不完整。 我想知道的是:

  1. 有沒有辦法在不提供 function 參數的情況下訪問指向單元測試 class 的指針?

  2. 有什么辦法不讓它成為 static function?

  3. 如果上述一個或兩個答案是否定的,有沒有辦法使用宏為用戶創建一個更簡單的界面,編寫測試?

您可以將 getReadableName function 作為測試 class 的一部分。 然后,您派生的 class 可以直接訪問它。

Test(groupNameString, reallyLongTestDescriptionString)
{
    printf("%s\n", this->getReadableName());

    // remainder of the unit test.
}

您可以使用宏中給出的名稱在 Test class 中設置一個受保護的變量,該變量將在您的 getReadbleName 中進行轉換。 順便說一句,您不需要模板。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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