我在这里听到很多关于提升的内容,我开始认为它对我的软件开发有很大的帮助。在我的特定情况下,并发和内存管理更是如此,因为我们在这方面遇到了很多错误。
我需要进行哪些关键语言功能才能有效地从使用提升和缩短学习曲线中获益?我已经看到 函数对象 是常用的,所以我可能需要对此进行改进。
此外,是否有任何教程和101资源我可以快速查看,以获得使用boost的感觉和理解。
我意识到有很多提升优惠,我必须为正确的工作选择合适的工具,但任何线索都会有所帮助。
答案 0 :(得分:9)
Boost拥有难以想象的数量的库。 很容易上手
更高级的包括
习惯提升需要时间,但我向你保证它会让你的生活更美好。另外,查看增强库的编码方式将有助于您更好地进行c ++编码,尤其是模板。
你提到在尝试提升之前你应该注意什么。我同意功能对象是一个很好的研究方法。另外,请务必查看模板编程。确保您知道的常见问题是何时将typename
限定符用于依赖类型。然而,在大多数情况下,这些库都有很好的文档记录,包括示例和参考资料。
答案 1 :(得分:6)
讨论了学习提升here。至于有用的语言功能?他们都是。如果您对C ++知之甚少,C ++是一种危险的语言。 RAII,仿函数/函数对象和模板可能涵盖了最重要的方面。 Boost的设计与STL类似,因此了解您的标准库至关重要。 Boost本身使用了很多模板元编程,但作为库用户,你不会经常需要它(除非你开始使用Boost.MPL)
与内存管理相关的错误是一个很好的指标,它是C ++,而不是你需要提升的Boost。安全处理内存的技术是众所周知的,并不是特定于Boost的。 (除了Boost的智能指针之外)。 RAII可能是解决此类问题时最重要的概念。
答案 2 :(得分:4)
我需要进行哪些关键语言功能才能有效地从使用提升中获益并缩短学习曲线?
......等等。
是否有任何教程和101个资源我可以快速查看以获得对使用boost的感觉和理解。
Boost有很好的记录。开始here。
有太多的图书馆迷路了。我会先说一些简单的,可能是智能指针或Boost.Test(单元测试框架) - 这将很快帮助您入门。另外,试着想一下你用STL无法轻易解决的问题。然后查看Boost文档或在此处发布。
如果您对函数式编程感到满意,请查看MPL / Lambda库。
答案 3 :(得分:4)
第一个IMO是smart pointers。集成到新代码中很简单,对于现有代码来说通常不是问题。它们使内存管理变得简单,并且可以用于许多其他资源。
C ++为您提供了管理自己内存的能力,智能指针可让您(大多数时候)在您不需要的时候为其提供支持。
第二个是 - 如你所提到的 - 函数对象,它们在C ++中填补了传统上通过继承解决的大差距,这在许多情况下是强耦合的。
我对这两种情况之外的提升只有很少的经验,但其余的大部分是相当“情境化的” - 你可能需要也可能不需要它。得到overview over the libraries,看看你需要什么。
boost::any
和boost::variant
很有必要使用变体数据类型,有两种不同的方法。
boost::regex
如果你需要一些文本解析。
boost::thread
和boost::filesystem
可帮助您编写可移植代码。如果您已经拥有良好的平台特定库,则可能不需要它们 - 但它们在任何情况下都优于API或C ++级别。
也许您喜欢我对boost smart pointers的介绍,a rather unorthodox可以使用它们。
答案 4 :(得分:1)
试试BjörnKarlsson的书:Beyond the C++ Standard Library: An Introduction to Boost。它非常简单易懂。在我完成Scott Meyers的三本c ++书籍(有效系列)之后,我读到了这本书。
答案 5 :(得分:1)
阅读Beyond the C++ Standard Library: An Introduction to Boost后,我建议您随便浏览boost.org上的文档,以了解可用的内容。当它看起来非常适合特定的应用程序时,您可以深入了解特定的boost库。
答案 6 :(得分:0)
我认为shared_ptr应该是最容易开始的地方。 开始在简单指针或auto_ptr数据类型的位置使用它。
您还可以查看weak_ptr。