c ++ - 元类会替换继承吗?

时间:2017-08-18 11:07:21

标签: c++ inheritance template-meta-programming metaclass

我已经观看了一些关于元类的视频和文章,IMO有可能取代继承并提供一种编译时继承的方法。

使用元类,我可以在编译期间提供接口,默认函数实现,甚至是类的实现的正确性(当然不是函数的主体)。那么在元类中可以做一些可以通过继承,多态和OO来完成的东西吗?

1 个答案:

答案 0 :(得分:0)

就像一般性评论一样,我写的是Python元类的“常用”作者: 对于“日常”使用,元类不是意味着,但是C ++元类可能与它们在Python中不同,我几乎看不到这样的概念被用来替换像继承那样常见的东西

继承有自己的角色。如果您需要针对整个类层次结构的特殊规则,那么使用元类来指定这些规则可能会很有用。 (C ++提案和我浏览的大多数解释性材料中的第一个例子是“接口” - 它要求所有方法都是虚拟的)。因此,假设您在系统中的一组完整的类中找到了您想要的特殊规则,并且可以使用元类表达它,这并不妨碍您从该元类创建单个基类,并创建所有其他类“正常”继承,如果从一个这样的类改变到另一个类只是通常的方法覆盖和专业化:继承仍然会更简单,无论是代码,还是任何人读取你的代码,以及工具链回声系统的演变C ++在几十年的语言存在。

所以,是的,元类继承可以,但是,允许你在元类中编码类的所有常见功能,它们只是使用这个元类创建新类,而不是继承。但是地球上没有动机可以做到这一点。

回到Python,我很熟悉这个概念:最近的语言took one step in the opposite direction - 在版本3.6中启用了以前只能通过元类实现的正常继承中的两种机制,并且这样做,进一步减少了需要元类的用例,因为它们必然需要额外的复杂性。