在一个项目中混合 boost 和 stl 库的缺点?

Posted

技术标签:

【中文标题】在一个项目中混合 boost 和 stl 库的缺点?【英文标题】:Downsides to mixing boost and stl libraries in one project? 【发布时间】:2016-12-03 17:32:41 【问题描述】:

我想知道是否可以在一个项目中同时使用 boost 和 stl 库?这样做的潜在缺点是什么(除了代码大小,这显然是一个)?我正在为原子类型和低级数据结构(例如向量)创建许多包装类,因此我认为这可以帮助解决一些潜在的未来问题,但我可能不会将所有东西都包装在我自己的容器类中。

【问题讨论】:

我不会为标准语言功能创建包装类。你这样做有什么收获?语义是精确定义的,C++ 必须提供类和类型。我认为损坏编译器的时代有望结束。 嗯,我正在创建一个游戏引擎并为基本功能提供包装类,这为我提供了更改 MyVector 类的实现的灵活性,而无需在我的代码库中的任何地方进行更改。所以我可以开始使用 stl::vector 作为 MyVector 的实现,然后更轻松地切换到使用eastl 或其他东西。 导致 EASTL 的一些假设已经过时,其中一些仍然有效。标准委员会已经进行了一些讨论。如果你有兴趣看看groups.google.com/a/isocpp.org/forum/?fromgroups#!forum/sg14 谢谢詹斯。看起来很有趣。我确实希望委员会开始认真对待游戏开发者的需求,因为 C++ 确实主导了这个行业。 【参考方案1】:

不要浪费时间来创建包装器。另外,boost 是作为 stl 的一种扩展而创建的,通常未来的 c++ 版本采用在 boost 中证明的概念。

当然,使用新库总是有一个缺点:需要学习更多的 api,在构建过程中需要注意更多的依赖项......

但如果它有用,为什么要重新创建可以使用的东西。 Boost 是用 stl 风格编写的任何方式。

【讨论】:

忘了说,例如,stl 算法可以毫无问题地接受 boost 容器。只需尝试选择一个容器,以免进行大量转换。 感谢您的洞察力。我在上面的评论回复中提到了我为向量之类的东西创建包装器的原因。我认为这对我来说非常有用。 如果您使用 stl 类型迭代器和 typedef,您将是一个编译器,可以切换到几乎任何 C++ 框架。不需要包装。如果在某个时候您想要更改为更具异国情调的库,那么您可以编写包装器。在此之前,typedef 将允许轻松切换,迭代器将确保代码兼容。 所以你说的不是创建“MyVector”类,我可以只做“typedef std::vector MyVector”?如果是这种情况,如果我调用 stl::vector 类的函数,而该函数恰好不是 vector 的另一个实现的函数名,该怎么办?因此,如果我在我的代码中执行类似“myVector.at(0)”的操作,然后将我的 typedef 切换为 boost::vector,它说(假设地)有一个函数名“myVector.atPosition(0)”。现在我必须将所有“.at(0)”更改为“.atPosition(0)”。 是的,这总是取决于你什么时候拿什么。在这种情况下,这是值得的,因为大多数框架都试图与 STL 保持一致,而当它们不符合时,替换就可以了。如果这个问题是关于 openGl 和 directX 的,我的建议会有所不同。

以上是关于在一个项目中混合 boost 和 stl 库的缺点?的主要内容,如果未能解决你的问题,请参考以下文章

Boost库初见

使用 OpenCV 修复混合 STL 实现

不需要boost::regex库的能进行正则表达式的代码?

Header Only Library的介绍

STL源码剖析之组件

Boost入门