继承一个已经被一个基类继承的类

问题描述 投票:0回答:1

我有一个抽象类,供想要使用某种 fooization 机制的对象使用

class Fooable
{
public:
    Fooable() { registered.insert(this); }
    ~Fooable() { registered.remove(this); }
    virtual fooify() = 0;

    static void fooify_all()
    {
        for(auto * f : registered)
            f->fooify();
    }

private:
    static std::unordered_set<Fooable*> registered;
};

然后是一个基类(注意私有继承):

class Fruit : private Fooable
{
    void fooify() override final;
}

还有派生类

class Apple : public Fruit, private Fooable
{
    void fooify() override final;
}

Apple
Fruit
都想拥有自己的
fooify
私有定义,它使用类私有变量并做一些事情。最后
fooify
将被称为两个类实现,彼此独立。

问题是,当

Apple
试图覆盖标有
final
的虚函数时,编译器会报错。虽然这些功能应该是无关的。

我可以添加间接级别,但这会使代码使用大量访问器或友元类,因为 fooify 确实访问了很多私有成员变量。

有什么想法可以使这项工作或重新设计成为一种好的方式吗?

c++ overriding multiple-inheritance diamond-problem
1个回答
-1
投票

你到底想达到什么目的?

如果 fruit 和 apple 有自己的专业化,下面的代码是不是更接近你的需要?


    class Fooable
    {
        Fooable() { /*global_register_fooable(this);*/ }
        ~Fooable() { /*global_unregister_fooable(this);*/ }
        virtual void fooify() = 0;
    };
    class Fruit : private Fooable
    {
        void fooify() override;
    };
    class Apple : public Fruit
    {
        void fooify() override final;
    };

此外,为什么在你的情况下私有继承?你能提供一个简单的用例吗?

© www.soinside.com 2019 - 2024. All rights reserved.