#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;
}
网友评论