2011-08-01 102 views
16

C++標準庫是與編譯器綁定還是可以提供不同的實現?C++標準庫是否可以替換?

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

我的問題是:

  • 標準庫替換?
  • 如果是的話,那麼一個人如何實現std::type_info
+6

對應答者的注意:STL!=標準庫。 STL僅僅是標準庫的一部分。 STL只能替換一個庫。標準庫不是。 –

回答

10

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

其他部分與特定的編譯器非常相關,就像您已經找到的那樣 - type_info其中庫相當地記錄了編譯器做了什麼而不是規定了它。

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

可以編寫一個可與​​多個編譯器一起工作的庫,但不能將某些低級代碼調優到每個特定的編譯器。其他地方提到的圖書館正是如此。

7

它是可更換的。看看到stl port

+0

我不確定,但'std :: type_info'可能需要編譯器支持它。 –

+0

它的確如此。 STLPort已經爲其支持的每個編譯器定義了它。 –

+0

STLport的最新版本是從2.5年前開始的。不是我稱之爲興旺的OSS項目。他們是否真的開始解決類似C++ 11類型的特性? – sbi

11

是的,有各種各樣的「補充交易」的:

  • 斯捷潘諾夫通過和李原STL實現。 1994年,Hewlett-Packard。不再維護。
  • SGI STL,基於Stepanov & Lee的原始實施。 1997年,Silicon Graphics。不再維護。
  • 的libstdC++從GNU(是的libg ++的一部分)從鐺
  • 的libC++
  • STLPort的,基於SGI STL
  • Rogue Wave標準庫(HP,SGI一樣,SunSoft,西門子多富)
  • 鼎信STL圖書館由PJ Plauger

編輯:

由於這顯然是對C++標準庫,也有一些替代它:

+1

+1:MS Visual Studio有自己的實現。 – Naszta

+1

@Naszta - 這是基於Dinkumware庫。 –

+1

@Naszta不,它使用Dinkumware庫中添加VS特定的東西。 – Praetorian

0

是的,即使不同的編譯器有STL的默認實現,STL並沒有被編譯器綁定。 您通常可以通過更改某個項目設置來更改STL實施。

E.g.在vS2008中,你可以做

工具 - >選項 - >項目和解決方案 - > VC++ Directoires - >包括fiels,添加一個不同的實現(例如STL PORT),然後將這一行移到最上面(默認實現),那麼你有它。

+0

任何人都在乎增加爲什麼他/她得到這一個downvote?這僅僅是一個錯字嗎?如果是這樣,我打賭你沒有通讀我的答案,而只是讀了前幾句話... – Gob00st

+0

只是一個猜測,但你使用「STL」和「標準庫」,就好像它們是可互換的。他們不是。 (從我所能看到的情況來看,你似乎意味着正確的事情,但很難說明你對這些術語的混淆。) – sbi