c++标准实践: virtual interface classes vs.模板

标签 c++ templates coding-style polymorphism

我必须就泛化与多态做出决定。

这个场景是标准的:我想让我的单体相互依赖 代码更加模块化、干净和可扩展。 仍处于改变设计原则可行的阶段, 而且,在我看来,这是非常可取的。

我会引入纯虚拟基类(接口(interface))还是模板?

我了解有关模板选项的基础知识: 更少的间接性,更好的性能,更多的编译 但 没有后期绑定(bind),等等。

STL 不使用太多(或没有?)继承,boost 也不使用。 但我认为这些旨在成为每个人都使用的非常小的基本工具 程序员写的两行代码。

我认为继承和后期绑定(bind)方法更适合 应可互换的大段代码和功能的插件风格, 可在部署后甚至在运行时更新等。

好吧,我的情况介于两者之间。

我不需要在运行时即时交换代码片段,编译时就可以了。 通常它也是一个非常核心且经常使用的功能, 它在逻辑上不能分成大块。

这让我稍微倾向于模板解决方案。 对我来说,它看起来也更干净一些。

是否有任何重大的不良影响,接口(interface)仍然是方式吗 去吗?他们什么时候没有? 哪个更符合标准 c++ 风格?

我知道这有点主观,但我真的很感兴趣 一些经验。我没有 Scott Meyers 有效 C++ 的拷贝 所以我把希望寄托在你们身上:)

最佳答案

您基本上是对的,当类型应该允许在运行时更改时(例如在插件架构中),动态多态(继承、虚拟)通常是正确的选择。如果类型只应在编译时更改,则静态多态(模板)是更好的选择。

模板的唯一潜在缺点是 1) 它们通常必须在 header 中定义(这意味着更多的代码会被#included),这通常会导致编译时间变慢。

但在设计方面,我看不出在可能的情况下使用模板有什么问题。

Which complies more with standard c++ style?

取决于什么是“标准 C++ 风格”。 C++ 标准库使用了所有东西。 STL 对所有内容都使用模板,稍旧的 IOStreams 库使用继承和虚函数,当然,从 C 继承的库函数两者都不使用。

如今,模板是迄今为止最受欢迎的选择,我不得不说这是最“标准”的方法。

关于c++标准实践: virtual interface classes vs.模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1165963/

相关文章:

javascript - 在 jQuery 中构建 html 元素的最清晰方法

C++ 类型后缀 _t、_type 或无

c++ - libcurl 错误,curl_easy_perform() 失败 : c++

c++ - 'this' 用于结构?

c++ - 低于 2,000,000 的质数总和给出错误结果

c++ - 这是一个 mixin,可以用 C++ 完成吗?

c++ - 在堆上创建的变量,指向同一个变量的2个指针有不同的地址?

c++ - 管理指针 vector 和对象 vector 的模板类

c++ - 具有通用 vector 和对类型的对 vector ,模板模板

c++ - C/C++ : "Grid[x + y * width]" versus "Grid[x][y]"