![](/img/trans.png)
[英]Inherit from two abstract classes, where one of them also needs parts of the other base 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.
}
显然,我远非不完整。 我想知道的是:
有没有办法在不提供 function 参数的情况下访问指向单元测试 class 的指针?
有什么办法不让它成为 static function?
如果上述一个或两个答案是否定的,有没有办法使用宏为用户创建一个更简单的界面,编写测试?
您可以将 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.