C ++标准库是否可以替换?

时间:2011-08-01 20:56:55

标签: c++

C ++标准库是否与编译器绑定,或者是否可以提供不同的实现?

我很想知道这一点,主要是因为似乎typeid关键字和std::type_info之间的关系阻碍了这一点。 typeid关键字取决于std::type_info的存在,我认为它是错误方向的依赖关系。我不知道自定义实现应该如何实现type_info::name()方法。

我的问题是:

  • 标准库是否可以替换?
  • 如果是,那么如何实施std::type_info

5 个答案:

答案 0 :(得分:11)

是的,有各种各样的'STL':

  • Stepanov和Lee的原始STL实施。 1994年,惠普。不再维护。
  • SGI STL,基于Stepanov& Sons的初步实施。李。 1997年,Silicon Graphics。不再维护。
  • 来自gnu的libstdc ++(是libg ++的一部分)
  • 来自clang的libc ++
  • STLPort,基于SGI STL
  • Rogue Wave标准库(HP,SGI,SunSoft,Siemens-Nixdorf)
  • P.J. Plauger的Dinkum STL图书馆

编辑:

由于这显然是关于 C ++标准库,所以也有一些替代方案:

答案 1 :(得分:11)

库的大部分独立于编译器,如容器和算法。

其他部分非常依赖于特定的编译器,就像你找到的那样 - type_info其中库代替了编译器所做的事情而不是规定它。

其他类似的例子可能是bad_exception,std :: size_t和C ++ 11等特性,如type_traits,atomics和std :: initializer_list,它们都需要编译器的支持。该库必须与特定编译器实际执行的操作紧密匹配。

可以编写一个与多个编译器一起工作的库,但不能在没有为每个特定编译器调整一些低级代码的情况下编写。其他地方提到的图书馆就是这样做的。

答案 2 :(得分:7)

可以更换。请查看stl port

答案 3 :(得分:0)

是的,即使不同的编译器具有默认的STL实现,STL也没有与编译器捆绑在一起。 您通常可以通过更改某些项目设置来更改STL实现。

E.g。在vS2008中,您可以执行

工具 - >选项 - >项目和解决方案 - > VC ++ Directoires - >包括fiels,添加一个不同的实现(例如STL PORT),然后将这一行移到顶部(在默认实现之上),然后就可以了。

答案 4 :(得分:0)

另一个替代STL的例子,牺牲了一些标准的速度合规性:EASTL(电子艺界)https://github.com/paulhodge/EASTL