我必须做出关于泛化与多态的决定。C++标准做法:虚拟接口类与模板
那么这个场景是标准的:我想让我的单片互相依赖的 代码更模块化,干净和可扩展。 它仍处于设计原则的变化可行的阶段,我认为它非常可取。
我会介绍纯粹的虚拟基类(接口)或模板吗?
我知道关于模板选项的基础知识: 间接少,性能更好,更编译 但 没有后期绑定,等等。
STL的没有多大用处(或没有?)继承和升压的确不会。 但我认为这些都是真正的小型基本工具,程序员每使用这两行代码。
我认为继承和后期绑定方法对于部署后甚至运行时可更新的代码和功能的大块代码和功能的插件风格更为合理。
那么我的情况是介于两者之间。
我不需要在运行时交换代码段,编译时间很好。 通常它也是一个非常重要且经常使用的功能块,它在逻辑上不可分割成大块。
这让我倾向于模板解决方案。 对我来说,它也看起来更清洁。
是否有任何大的不良影响,因此仍然接口的方式 去?他们什么时候不是? 哪些更符合标准C++风格?
我知道这是主观的接壤,但我在 一些经验很感兴趣。我没有Scott Meyers有效的C++ 的副本,所以我将我的希望寄托在你们身上:)
嗯,我确实看到使用模板而不是接口的一个问题:需求是完全隐含的。当你必须实现纯虚函数时,你会得到它的确切签名。但是当你看到像_AllocT或Iter这样的模板类型时,你不知道你的类需要什么类型,甚至不需要是类。你唯一需要知道的方法是寻找一份关于它的体面文档,我今天尝试创建自己的stl兼容分配器类时遇到了麻烦。 – Virus721 2015-06-11 15:23:51
“你只有通过寻找一个体面的文档来了解它” - 或者通过编译和查看编译器抱怨无法找到哪些函数,是的。此外,概念旨在解决这个问题。 (即使它是一个界面,你仍然需要找到体面的文档。知道要覆盖哪些函数是不够的。你还需要知道它们的语义应该是什么,并且界面不会告诉你)。尽管如此,你是对的。语言支持这两个原因是有原因的。 :) – jalf 2015-06-11 15:27:27