C ++标准库是否与编译器绑定,或者是否可以提供不同的实现?
我很想知道这一点,主要是因为似乎typeid
关键字和std::type_info
之间的关系阻碍了这一点。 typeid
关键字取决于std::type_info
的存在,我认为它是错误方向的依赖关系。我不知道自定义实现应该如何实现type_info::name()
方法。
我的问题是:
std::type_info
答案 0 :(得分:11)
是的,有各种各样的'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