Is CRTP http://en.wikipedia.org/wiki/Curiously_recurring_template_pattern有足够的能力智胜virtual
功能齐全?
我认为 CRTP 的唯一缺点是为每个重复模式生成大量代码。对于较小的设计(其中 2-3 个类从基础派生),CRTP 是更好的主意吗?
CRTP不提供运行时多态性。如果需要运行时多态性,则需要虚拟方法。更糟糕的是,由于基类是模板化的,您甚至无法真正使用子类对象,就好像它们与基类具有相同类型一样,因为您无法将它们强制转换为该基类 - 它不存在;这只是一个模板。
我认为一种更有用的思考多态性的方式——替换 CRTP 不是作为虚拟继承的替代品,而是作为mixin 的一种形式。您并不是在通常意义上创建子类;而是在创建子类。相反,您将预先制作的功能添加到您的类中。
混合示例:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)