繁体   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