gpt4 book ai didi

c++ - 是否可以在编译时防止特定基类的多重继承?

转载 作者:可可西里 更新时间:2023-11-01 18:29:45 26 4
gpt4 key购买 nike

我想做的是开发两个不同的基类,它们不应在一个派生类中一起继承。有什么办法可以在编译时强制执行此操作吗?

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?

我知道 documentation是个好主意,只是想知道是否可行。

最佳答案

您正在 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
};

关于c++ - 是否可以在编译时防止特定基类的多重继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8754775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com