我想要做的是开发两个不同的基类,这两个基类不应在一个派生类中一起继承。有什么方法可以在编译时强制执行此操作吗?
class Base1 {};
class Base2 {};
class Derived1 : public Base1 {} // OK!
class Derived2 : public Base2, public Other {} // OK!
class Derived3 : public Base1, Base2 {} // Can I force the compiler to complain?
Derived1 d1; // OK!
Derived2 d2; // OK!
Derived3 d3; // Or can I force the compiler to complain here?
我知道文档 https://stackoverflow.com/questions/2184133/prevent-class-inheritance-in-c是个好主意,只是想知道是否可能。
您正在 Base1 和 Base2 之间建立某种耦合,因为它们不能同时派生。
您可以使它们都从 Base0 派生,在这种情况下,如果您从 Base1 和 Base2 派生,您将获得多重继承菱形,因此假设您不使用虚拟继承并且不解决重复,您将收到编译器错误。
这可能会解决你的问题,但我质疑你为什么要这样做。
(Base0 不应该是一个完全空的类,因为那里必须有一些不明确的东西才会导致编译器抱怨。当然你可以解决它,这样它就不会完全阻止你从两者派生,只是它会生成所需的如果您错误地执行了编译器“错误”)。
一个例子可能是:
class Base0
{
protected:
virtual ~Base0(){};
virtual void abstractMethod() const = 0;
};
class Base1 : public Base0
{
protected:
virtual void abstractMethod() const;
// rest of Base1
};
class Base2 : public Base0
{
protected:
virtual void abstractMethod() const;
// rest of Base1
};
class Derived : public Base1, public Base2
{
// if I don't resolve abstractMethod it is ambiguous and the compiler will let me know
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)