<分区>
来自 Java/python 世界,几乎没有或没有 C++ 经验,为了 Liskov substitution principle,我习惯于使用接口(interface)将类的契约与其实现分开。和 dependency injection .
我不打算详述 Java 中接口(interface)的所有好处,或者为什么引入它们(缺少多重继承)而在 C++ 中不需要它们 (see here for example)。 我还发现了如何拥有 equivalent of a Java interface in C++
我的问题更多是关于这在 C++ 环境中是否是一种好的做法。
据我了解,没有纯虚方法就不可能有接口(interface)的等价物。这意味着在 C++ 中引入接口(interface)会在代码中引入一些开销(因为虚拟方法 introduce an overhead )。
因此,基于纯虚方法的接口(interface)是不是一件好事?是否有其他方法可以实现我不知道的 Liskov 替换原则和依赖注入(inject)?也许使用模板?
例如google测试has it easy to mock virtual methods , 但提出了一种方式 mocking non virtual methods .
我想弄清楚我的编码习惯是否仍然适合我的新 C++ 环境,或者我是否应该适应和改变我的范例。
[根据答案和评论进行编辑]
我得到了我正在寻找的部分答案(即“是/否,有论据”),我想我应该进一步澄清我仍在努力弄清楚的内容
- 除了使用类似接口(interface)的设计来进行依赖注入(inject)之外,是否有替代方案?
- 反问这个问题:除了速度绝对至关重要的情况外,是否应该决定采用基于接口(interface)的设计,什么时候人们不想想要基于纯虚拟方法设计接口(interface)?<
注释:
- 我想我想弄清楚我在界面方面的想法是否过于狭隘(因此我的编辑正在寻找替代方案)。
- 我在 C++ 11 环境中工作