通用 C++ 架构

Jen*_*lom 6 c++ architecture oop stl

我已经编写 C++ 和 Java 有一段时间了,并且对常见的 C++ 架构有一些疑问。

当我用 Java 编程时,我尝试模仿标准库,即使用诸如 Iterable 和 Serializable 之类的接口,并具有类似的命名约定和功能。然而,对于 C++,我在尝试模仿 STL 约定时犹豫不决(迭代器除外)。

我将其归结为以下问题(是以下要实施的常见约定):

  • 分配器
  • 接口(只有纯虚方法的类)
  • 模板而不是抽象基类
  • 限制异常抛出...
  • ... 或者让一个类可以选择抛出异常(例如在 std 流中)
  • 将 typedef 用于或多或少的明显类型(reference_type、pointer_type、value_type,...)

还是 C++ 的标准根本不值得模仿?

感谢您的意见/回答!

Kie*_*eli 1

我使用 C++ 的次数越多,就越不喜欢模仿我发现的最好的库。当我们团队中出现初级开发人员时,问题就出现了。他们会理解基础知识,但不会理解语言的微妙之处。他们可能知道如何使用模板语法创建地图或列表,但当将其应用于另一个对象时无法理解它。调试和通读代码的复杂性也增加了解决问题或改进产品的宝贵时间。

我逐渐倾向于使用该语言最基本的功能,这通常会使代码处于更自然可读的状态。8-12 个月后,当我回过头去寻找代码中的一个不起眼的错误时,我对偏离这条道路感到后悔。

另一方面,Java 具有更简单的库实现,初级 Java 开发人员可以很好地理解这些实现。我确实发现初级 Java 开发人员往往比初级 C++ 开发人员更了解该语言。话虽这么说,由于成为中级 C++ 程序员所需的思想水平较低,C++ 开发人员有更多机会成为真正有能力的人。

  • 听起来他们在教授 Java 方面比教授 C++ 做得更好。另外,如果你有很多初级开发人员,那么你就必须用任何语言来简化事情。我在 Python 和 C 中也遇到过这个问题。您可能会感到惊讶,或者也许不会,有多少初级开发人员不明白为什么您想要一个指向指针的指针。 (2认同)