美文网首页
解决基多重继承类纯虚函数名字冲突问题

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

作者: 大啸 | 来源:发表于2022-12-06 13:42 被阅读0次
    #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;
    }
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/crwwfdtx.html