是否有可能编写一个通用基类,所有其他类(除了它)公开并实际上继承? (gcc有解决方法吗?)。最好不要明确地继承...因为我希望标准库的东西也能从这里继承....这是明智的吗?
如果你投票,请解释原因(我相信这是一个合法的问题,即使它是一个愚蠢的事情,它可能是,但这是问题的一部分)
答案 0 :(得分:6)
试图在一个普通的虚拟基础上偷工作会严重破坏C ++。
有许多语言规则允许对标准布局和简单可复制类型进行特殊处理。具有虚拟基类的类不符合这两种类。
甚至其他声称具有公共基类的系统(例如Microsoft的.NET)也有一些可以从基类继承的blit-able类型是一个方便的谎言 - 不允许虚拟调度,所有与继承成员相关的调用这些类必须在编译时解决。
答案 1 :(得分:2)
是。使用公共虚拟析构函数定义类。称之为base
。
现在每个课程foo
完成后:
class foo:
public virtual base
完成了!
Naturaly这仅适用于您自己的类型。如果您想在其他类型(例如std
)上强制执行此操作,只需按类型在您自己的std
命名空间类型中重新实现notstd
,并从base
继承所有类型。同样,对于您想要使用的任何第三方库:有些可能证明是不切实际的。
请注意,这可以更改类的二进制布局,并更改存在的guaratees:例如,没有这样的类foo
是标准布局。
另一方面,如果你想要一种新的语言,其行为主要类似于C ++,但强制所有类的基类,并从结构中解除类,请考虑java。