我有一个抽象类,供想要使用某种 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 确实访问了很多私有成员变量。
有什么想法可以使这项工作或重新设计成为一种好的方式吗?
你到底想达到什么目的?
如果 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;
};
此外,为什么在你的情况下私有继承?你能提供一个简单的用例吗?