我从事 C++ 和 Java 编程已经有一段时间了,对常见的 C++ 架构有一些疑问。
当我用 Java 编程时,我尝试模仿标准库,即使用 Iterable 和 Serializable 等接口(interface)并具有类似的命名约定和功能。然而,对于 C++,我在尝试模仿 STL 约定(迭代器除外)时犹豫不决。
我将其归结为以下问题(是以下要实现的通用约定):
- 分配器
- 接口(interface)(只有纯虚方法的类)
- 模板而不是抽象基类
- 限制异常抛出...
- ... 或让一个类可选地抛出异常(例如在标准流中)
- 为或多或少的明显类型(reference_type、pointer_type、value_type ...)使用 typedef
或者说 C++ 的标准根本不值得模仿?
感谢您的意见/回答!
我使用 C++ 的次数越多,就越不喜欢模仿我找到的最好的库。当我们在团队中加入初级开发人员时,问题就来了。他们会理解基础知识,但不会理解语言的微妙之处。他们可能知道如何使用模板语法创建 map 或列表,但在将其应用于另一个对象时却无法理解。调试和通读代码的额外复杂性也会占用宝贵的时间来解决问题或改进您的产品。
我已经逐渐倾向于使用该语言的最基本功能,这通常会使代码处于更自然可读的状态。当我在 8-12 个月后回头寻找代码中的一个模糊错误时,我对偏离这条道路感到遗憾。
另一方面,Java 具有更简单的库实现,更多初级 Java 开发人员可以很好地理解这些实现。我确实发现初级 Java 开发人员往往比初级 C++ 开发人员对语言有更好的理解。话虽这么说,由于成为中级 C++ 程序员所需的思维水平较低,C++ 开发人员有更多机会成为真正有能力的人。