解决基多重继承类纯虚函数名字冲突问题

#include 

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 TestAImpl : public TestA
{
public:
    TestAImpl() = default;
    ~TestAImpl() override = default;

    void run() override
    {
        TMaster* pThis = static_cast(this);
        pThis->runA();
    }
};

template
class TestBImpl : public TestB
{
public:
    TestBImpl() = default;
    ~TestBImpl() override = default;

    void run() override
    {
        TMaster* pThis = static_cast(this);
        pThis->runB();
    }
};

class Master : public TestAImpl, public TestBImpl
{
public:
    Master() = default;
    ~Master() override = default;

    void runA()
    {
        std::cout << "runA" << std::endl;
    }

    void runB()
    {
        std::cout << "runB" << std::endl;
    }
    
};

template
void fun(T* obj)
{
    obj->run();
}

int main(int argc, char* argv[]) 
{
    Master* test = new Master;
    fun(test);
    fun(test);
    delete test;
}

你可能感兴趣的:(解决基多重继承类纯虚函数名字冲突问题)