两个抽象类,派生自同一个基类.如何访问从一个抽象类到另一个抽象类的指针

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

本文关键字:抽象类 访问 一个 另一个 指针 基类 两个 派生 同一个 何访问      更新时间:2023-10-16

我正在为我的 cppUnit 测试工具编写一个帮助程序类,其中包括打印带有空格的测试描述。由于测试工具连接各种元素以命名测试类,因此测试名称中的空格会导致错误。 这听起来可能微不足道,但是当您查看 60 个测试的测试输出时,这些测试都是类似名称的骆驼大小写句子运行,空格很好。

由于我不想触摸线束,因此我创建了我的帮助程序类,以便它派生自类 Test,每个单独的测试也是从 test 派生的类。 我很不擅长多态性,所以对我有耐心。 我正在尝试做的是从我的帮助程序类(成员 getName(( 访问单元测试类中的成员 getName((,该单元测试类是从 Test 基类继承的公共成员。

以下是我迄今为止所做工作的摘录。 它确实有效,但是我希望在实际调用此函数时更干净。

测试助手类

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();
}
};

单元测试

仅供参考,这是一个宏,它采用两个参数一个组和一个名称,并生成一个继承 Test 类的类。

TEST(groupNameString, reallyLongTestDescriptionString)
{
printf("%sn", TestHelperClass::getReadableName(this));
// remainder of the unit test.
}

显然,我远非不完整。 我想知道的是:

  1. 有没有办法在不提供函数参数的情况下访问指向单元测试类的指针?

  2. 有没有办法不使它成为静态函数?

  3. 如果上述一项或两项的答案是否定的,有没有办法使用宏来创建更多 简单的界面为用户,编写测试?

你可以使 getReadableName 函数成为 Test 类的一部分。然后,派生类可以直接访问它。

Test(groupNameString, reallyLongTestDescriptionString)
{
printf("%sn", this->getReadableName());
// remainder of the unit test.
}

您可以使用宏中给出的名称在 Test 类中设置一个受保护的变量,该变量将在 getReadbleName 中转换。顺便说一句,您不需要模板。