【发布时间】:2017-04-16 01:08:54
【问题描述】:
我有一组实现相同业务方法的类。由于性能原因,我计划使用 CRTP 而不是虚拟调度。但我想将编码的便利性保留在带有继承和虚拟方法的单个接口中。
是否可以让我的专用类既继承自模板化抽象类(使用 CRTP 来保存公共代码),又继承自纯虚拟类,这样我就可以创建每种类型的实例但让我的客户端代码依赖只在界面上?更好的是,如何使用 CRTP 为客户端代码提供单个接口,同时拥有多个实现?
【问题讨论】:
-
好吧,如果你计划重构你的代码由于性能原因抽象方法不是一个好主意......你使用 CRTP 来避免虚拟调度,这就是为什么它的常见替代名称是静态多态性。当然从句法的角度来看,没有人可以阻止你这样做,但恕我直言,你需要仔细考虑......
-
公共方法不会在接口中,只在特化中。
标签: c++ c++11 inheritance crtp pure-virtual