在公共库中找不到哪些组件对C ++项目至关重要?

时间:2010-08-24 16:48:39

标签: c++

对于大多数C ++项目,Boost涵盖了许多基础组件,但经常使用的解决方案和习语需要一些锅炉板或地面工作。您认为在每个项目中拥有它并因此将它放在一个小的“库”中是如此重要? 我想到的一些事情:

  • Singleton基类(有人认为他需要它,所以他可以正确地做到这一点)
  • ScopeGuard
  • 工厂基础
  • any_iterator

(最后两个在Loki,但Loki与Boost重叠,人们对使用它犹豫不决。)

编辑:我可能应该补充一点,我不会询问标准库的常用扩展名,例如: copy_if

8 个答案:

答案 0 :(得分:5)

以上都不是。特别是,绝对不是Singleton类,因为单身人士的使用通常是indication designflaw。在过去的15年里,我从来没有需要过Singleton课程,而且我在旅途中找到的所有课程都是黑客攻击或者其他方式损害了他们所处系统的稳健性。

一般来说,除了一个好的,符合标准的编译器,希望永远不要停止学习更多关于我的选择语言和不限制我的动作的编码标准,我发现我什么都不需要写完整的系统。

特别值得注意的是,在过去的15年里,我所做的每项工作都明确禁止使用Boost。虽然我在我自己的项目中使用Boost,但在我使用的小工具中,我的生产代码都没有使用它。我是Boost的粉丝,但我并没有真的错过它。现在,在VS2010中支持C ++ 0x,我更想念它。

那就是说,这些年来,我已经建立了一个#include图书馆,无论我走到哪里,我都会带着有用的小东西和小玩意儿。它包括:

  • 一个例外框架
  • 适用于sprintf
  • std::string版本
  • 高分辨率计时器类,我主要用于开发,压力测试和调试
  • transform_if
  • 的实施
  • copy_if
  • 的实施

我很少使用其他一些STL扩展。

答案 1 :(得分:2)

我的小型图书馆,我随身携带的大多数项目都包含非常实用的工具:

  • 断言实用程序(使用用户对话框发布和调试断言,其中包含“启动调试器”的详细信息和按钮,“忽略此断言”,“始终忽略..”)
  • 缓冲实用程序,以避免使用“普通”堆数组(类HeapBuffer和带有引用计数的类SharedHeapBuffer)
  • 伐木设施
  • UTF8 / UCS2编码/解码
  • 配置实用程序(具有单行字符串到数字/布尔转换方法的CfgValue类)
  • 一些快速字符串到数字和数字到字符串例程
  • 快速浮动到int转换例程
  • 在分隔符实用程序上爆炸/破坏数字/字符串
  • ini文件解析器&作家
  • 计时器类和一些快速和简单的分析工具
  • 互斥,条件,r / w-locks,多线程实用程序(但我不时用升级锁和线程实用程序替换越来越多)
  • 轻量级邮件系统“构建工具包”(邮件,端口,发件人,处理程序,接收器,调度程序,路由器,线程接收器,线程池等)

答案 2 :(得分:2)

你建议没有。

单身人士是一个可怕的反模式,我在C ++程序中最不想要的就是更多。 如果您对自己的类一直使用RAII,那么您实际上并不需要单独的ScopeGuard类。

工厂基础?它到底会做什么?我真的没有看到工厂之间有足够的共同功能,因此值得投入一个通用的基类。

我不确定any_iterator你的意思。 :)

对于C ++项目至关重要的事情是人们放入库中的。 如果某些公共库中没有某些东西,那么这是因为它不常见(或者因为它必须针对单个项目进行自定义,因此库版本几乎没有价值)

所以你的问题基本上可以改为“对流行的图书馆有什么明显的补充,但还没有添加到他们身上”,答案显然是“没什么,因为如果这个想法是显而易见,图书馆作家也想到了它,所以他们已经添加了它“

答案 3 :(得分:1)

也许我不像其他人那样编写大量的代码(专业使用C ++六年),但我会选择: 没有 。任何时候我都希望在标准库或Boost中使用成语,这是一个线索,也许这不是最好的方法。通常,您可以通过重写它们来利用现有结构来更简单地表达您的概念。好的代码很容易编码。让Boost背后的天才为你处理复杂的事情。

答案 4 :(得分:0)

环形或循环缓冲区。这是嵌入式系统中经常使用的数据结构。

答案 5 :(得分:0)

答案 6 :(得分:0)

日志记录类(也适用于Gui)

答案 7 :(得分:0)

一个或两个加密库,包含在一个漂亮的界面中。

哈希算法也非常有用。