一个基础来统治它们。将他们全部带入黑暗中的一个基础将他们绑定

时间:2016-04-28 00:32:12

标签: c++ inheritance gcc

是否有可能编写一个通用基类,所有其他类(除了它)公开并实际上继承? (gcc有解决方法吗?)。最好不要明确地继承...因为我希望标准库的东西也能从这里继承....这是明智的吗?

如果你投票,请解释原因(我相信这是一个合法的问题,即使它是一个愚蠢的事情,它可能是,但这是问题的一部分)

2 个答案:

答案 0 :(得分:6)

试图在一个普通的虚拟基础上偷工作会严重破坏C ++。

有许多语言规则允许对标准布局简单可复制类型进行特殊处理。具有虚拟基类的类不符合这两种类。

甚至其他声称具有公共基类的系统(例如Microsoft的.NET)也有一些可以从基类继承的blit-able类型是一个方便的谎言 - 不允许虚拟调度,所有与继承成员相关的调用这些类必须在编译时解决。

答案 1 :(得分:2)

是。使用公共虚拟析构函数定义类。称之为base

现在每个课程foo完成后:

class foo:
  public virtual base

完成了!

Naturaly这仅适用于您自己的类型。如果您想在其他类型(例如std)上强制执行此操作,只需按类型在您自己的std命名空间类型中重新实现notstd,并从base继承所有类型。同样,对于您想要使用的任何第三方库:有些可能证明是不切实际的。

请注意,这可以更改类的二进制布局,并更改存在的guaratees:例如,没有这样的类foo是标准布局。

另一方面,如果你想要一种新的语言,其行为主要类似于C ++,但强制所有类的基类,并从结构中解除类,请考虑