#include <iostream>
class TestA
{
public:
TestA() = default;
virtual ~TestA() = default;
virtual void run() = 0;
};
class TestB
{
public:
TestB() = default;
virtual ~TestB() = default;
virtual void run() = 0;
};
template<class TMaster>
class TestAImpl : public TestA
{
public:
TestAImpl() = default;
~TestAImpl() override = default;
void run() override
{
TMaster* pThis = static_cast<TMaster*>(this);
pThis->runA();
}
};
template<class TMaster>
class TestBImpl : public TestB
{
public:
TestBImpl() = default;
~TestBImpl() override = default;
void run() override
{
TMaster* pThis = static_cast<TMaster*>(this);
pThis->runB();
}
};
class Master : public TestAImpl<Master>, public TestBImpl<Master>
{
public:
Master() = default;
~Master() override = default;
void runA()
{
std::cout << "runA" << std::endl;
}
void runB()
{
std::cout << "runB" << std::endl;
}
};
template<class T>
void fun(T* obj)
{
obj->run();
}
int main(int argc, char* argv[])
{
Master* test = new Master;
fun<TestA>(test);
fun<TestB>(test);
delete test;
}
解决基多重继承类纯虚函数名字冲突问题
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 纯虚函数:没有函数体且初始化为0的虚函数,用来定义接口规范 抽象类(Abstract Class)含有纯虚函数的类...
- 一.虚函数 二.纯虚函数 三,虚析构函数 四.纯虚函数 五,多继承 六.多继承-虚函数 七.菱形继承 八. 虚继承...
- 一.继承和派生 1.概念: 基类(父类):原有的类 派生类(子类):基于基类新建立的类 派生(类的派生):在原有类...
- 虚函数带来的成本 1. 类的内存空间增加 类一旦声明了虚函数,就必须为这个类耗费一个vtbl的空间,且表的大小视虚...
- 以前不明白为什么在R中使用函数需要加个包名,今天算是明白了,因为有写内置函数在多个包中都有,你不加的话R就不知道该...