簡體   English   中英

C ++標准庫是否可以替換?

[英]Is the C++ Standard Library replaceable?

C ++標准庫是否與編譯器綁定,或者可以提供不同的實現?

我很想知道這一點主要是因為似乎typeid關鍵字和std::type_info之間的關系阻礙了這一點。 typeid關鍵字取決於std::type_info的存在,我認為它是錯誤方向的依賴關系。 我不知道自定義實現應該如何實現type_info::name()方法。

我的問題是:

  • 標准庫是否可以替換?
  • 如果是,那么如何實現std::type_info

是的,有各種各樣的'STL':

  • Stepanov和Lee的原始STL實施。 1994年,惠普。 不再維護。
  • SGI STL,基於Stepanov&Lee的原始實施。 1997年,Silicon Graphics。 不再維護。
  • 來自gnu的libstdc ++(是libg ++的一部分)
  • 來自clang的libc ++
  • STLPort,基於SGI STL
  • Rogue Wave標准庫(HP,SGI,SunSoft,Siemens-Nixdorf)
  • PJ Plauger的Dinkum STL圖書館

編輯:

由於這顯然與C ++標准庫有關 ,因此也有一些替代方案:

庫的大部分獨立於編譯器,如容器和算法。

其他部分非常依賴於特定的編譯器,就像你找到的那樣type_info ,其中庫代替編譯器所做的而不是規定它。

其他類似的例子可能是bad_exception,std :: size_t和C ++ 11等特性,如type_traits,atomics和std :: initializer_list,它們都需要編譯器的支持。 庫必須與特定編譯器實際執行的操作緊密匹配。

可以編寫一個可以與多個編譯器一起工作的庫,但不能在沒有為每個特定編譯器調整一些低級代碼的情況下編寫。 其他地方提到的圖書館確實如此。

它是可替換的。 看看stl端口

是的,即使不同的編譯器具有默認的STL實現,STL也不與編譯器捆綁在一起。 您通常可以通過更改某些項目設置來更改STL實現。

例如,在vS2008中,您可以這樣做

工具 - >選項 - >項目和解決方案 - > VC ++ Directoires - >包括fiels,添加不同的實現(例如STL PORT),然后將此行移到頂部(在默認實現之上),然后就可以了。

另一個替代STL的例子,犧牲了一些符合標准的速度:EASTL(電子藝界) https://github.com/paulhodge/EASTL

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM