通用C++;建筑学 我已经编程C++和java已有相当长的时间了,对C++的架构有一些问题。

通用C++;建筑学 我已经编程C++和java已有相当长的时间了,对C++的架构有一些问题。,c++,oop,architecture,stl,C++,Oop,Architecture,Stl,当我用Java编程时,我试图模仿标准库,即使用诸如Iterable和Serializable之类的接口,并具有类似的命名约定和功能。但是,在C++中,当试图模仿STL约定时(除了迭代器),我犹豫了。 我将其归结为以下问题(以下是要实现的常见约定): 分配器 接口(仅具有纯虚拟方法的类) 模板而不是抽象基类 正在限制异常引发 。。。或者让一个类选择性地抛出异常(例如在std流中) 对明显类型(引用类型、指针类型、值类型等)或多或少使用typedef 还是C++的STD根本不值得模仿?< /P>

当我用Java编程时,我试图模仿标准库,即使用诸如Iterable和Serializable之类的接口,并具有类似的命名约定和功能。但是,在C++中,当试图模仿STL约定时(除了迭代器),我犹豫了。 我将其归结为以下问题(以下是要实现的常见约定):

  • 分配器
  • 接口(仅具有纯虚拟方法的类)
  • 模板而不是抽象基类
  • 正在限制异常引发
  • 。。。或者让一个类选择性地抛出异常(例如在std流中)
  • 对明显类型(引用类型、指针类型、值类型等)或多或少使用typedef

还是C++的STD根本不值得模仿?< /P>


谢谢你的意见/回答 我逐渐倾向于使用该语言最基本的功能,这通常会使代码处于更自然可读的状态。当我在8-12个月后回过头来寻找代码中一个模糊的bug时,我对偏离这条路径感到遗憾


另一方面,Java有更简单的库实现,这一点为更多初级Java开发人员所理解。我发现初级java开发者往往对C++语言有了更深入的了解。据说,C++开发人员有更多的机会成为真正的胜任者,因为中间C++程序员需要的思维水平较低。

这很大程度上取决于项目。一般的建议似乎是:不要担心有一个具体的C++标准。 例如,对于typedef,有多个“赞成”和“反对”的意见

<> P> C++中一个具体的编码风格在C++中的重要性不高是因为语言没有提供执行和检查这些样式的方法。 即语法不易解析,因此几乎没有工具有意义地检查/重构C++代码。 这意味着样式检查的重担落在程序员的肩上。也就是说,实施样式指南没有什么意义,因为这样一来,它们节省的大部分时间就浪费在手动样式检查上了

所以只要使用你的项目/公司使用或决定使用的任何东西

以下是我的个人喜好:

分配器:无意见。如果您需要自定义分配器,很可能您比我更清楚如何使用它。
接口:如果您正在做任何对性能敏感的工作,请不要这样做。它们使实时应用程序中的速度明显减慢。抽象虚拟类和pImpl模式。
模板而非抽象基类:视情况而定。但一般的看法似乎是,模板应该用于类似容器的功能和其他一些简单的情况。否则,这是一个不错的模式。调试这些程序仍然是一件非常痛苦的事情,并且将在未来几年内完成。
限制异常抛出:是的,这样做。尽量不要使用异常,因为信不信由你,在2012年,它们仍然没有得到普遍支持。

使用typedefs::只需尝试使用c++11的std::auto。否则,它们会让你的生活变得更艰难,因为它们已经到了定义宏的一半了。我个人会使用IDE(或Vim)来减轻长名字的打字压力,并写出长名字。

Hm。这很难用有意义的方式回答。你真的在问六个截然不同的大问题;“STL为什么使用”,用于中的x。这太过分了。我投票结束这个问题,因为它的范围太广了。试着问问他们中的一个。类似于“为什么STL使用分配器?我从来没有使用过它们,我想知道它们为什么会存在。我应该编写自己的类以由分配器参数化吗?”之类的东西,例如。如果我将它们分成更多的问题,它们都会像这样:对自定义容器使用分配器是常见的惯例吗?使用接口是常见的惯例吗?等等对于我自己的项目,我更喜欢遵循良好的实践,那么从我的项目到其他人的项目的跳转就更小了。所以我真正想知道的是,“遵循STL风格的编码是一种好的实践吗?”,我不相信“增加的复杂性”。就我而言,标准库在降低复杂性方面非常出色。诚然,编写易于使用的通用库是困难的,但事实总是如此。这些特征的增加大大增加了客户端代码的复杂性。听起来,他们在教java方面比C++做得更好。此外,如果你有很多初级开发人员,那么你就必须用任何语言把事情简化。我在Python和C中也遇到了这个问题。你会感到惊讶,也许你不会,有多少初级开发人员不明白你为什么想要一个指向指针的指针。所以。。。用C++ C++标准风格,制作自己的框架风格?模板有很多的力量,很难解释。Alexandrescu用现代C++设计做了一次很好的尝试。我从来没有见过最近的编译器,即使在嵌入式空间中也没有